2010-03-01 14 views
12

Sto cercando di rendere le proprietà della classe che possono essere impostate solo tramite il costruttore della stessa classe.Impostare le proprietà di una classe solo tramite il costruttore

+0

Ciao, la domanda è un po 'vaga, non hai menzionato quale linguaggio di programmazione sei re su e le etichette scelte sono povere. Puoi per favore modificare e chiarire/elaborare di più? – BalusC

+0

Quale lingua? Hai provato su Google? Questa è una parte piuttosto elementare di qualsiasi lingua. – noah

risposta

8

Fai le proprietà sono di sola lettura backup campi:

public class Thing 
{ 
    private readonly string _value; 

    public Thing(string value) 
    { 
     _value = value; 
    } 

    public string Value { get { return _value; } } 
} 
+0

Hey David, grazie per la risposta rapida, pensi che questo renda le proprietà della classe impostate solo dal costruttore –

+1

Sì, sì. Se stai utilizzando C#, aggiorna i tag sul tuo post originale per essere più chiaro. Questa risposta presuppone che tu stia utilizzando C#. Se non lo sei, di nuovo, aggiungi un tag con il linguaggio di programmazione che stai utilizzando, in modo che le persone possano capire la domanda più chiaramente. –

20

This page from Microsoft descrive come realizzare impostazione di una proprietà solo dal costruttore.

È possibile creare una proprietà immutabile in due modi. È possibile dichiarare l'accessor set come privato. La proprietà è impostabile solo all'interno del tipo , ma è immutabile per i consumatori. È possibile invece dichiarare solo l'accesso get, che rende la proprietà immutabile ovunque tranne nel costruttore del tipo.

In C# 6.0 incluso in Visual Studio 2015, è stata apportata una modifica che consente l'impostazione di ottenere solo proprietà dal costruttore. E solo dal costruttore.

Il codice potrebbe quindi essere semplificata per solo un ottenere solo immobile:

public class Thing 
{ 
    public Thing(string value) 
    { 
     Value = value; 
    } 

    public string Value { get; } 
} 
1

Il modo corretto è:

public string MyProperty{ get; private set; } 

public MyClassConstructor(string myProperty) 
{ 
    MyProperty= myProperty; 
} 
+0

MyProperty può essere modificato con qualsiasi metodo nella stessa classe. – mayu

Problemi correlati