2010-09-02 7 views

Répondre

10

Si vous voulez être en mesure de définir la valeur que dans le constructeur, je vous recommande le mot-clé readonly:

public class MyClass 
{ 
    private readonly string _name; 
    public MyClass(string name) 
    { 
     _name = name; 
    } 

    public string Name 
    { 
     get { return _name; } 
    } 
} 
+0

Merci, cela ne peut pas être fait en utilisant les propriétés auto, non? –

+1

Non, malheureusement, il ne peut pas, c'est pourquoi vous avez le mot-clé 'readonly' :-) –

+0

Merci Darin. Dommage qu'ils ne permettent pas cela pour les propriétés automobiles. Parce qu'il pourrait être possible de faire pour les propriétés auto par Microsoft, non? –

7

Le mot-clé private permet la propriété à définir partout dans la classe:

private set; 

Ie:

public string Name {get; private set;} 

Si vous vouliez aussi pour lui permettre de régler d'une classe héritant, vous pouvez utiliser protected à la place.

Vous pouvez utiliser le mot clé readonly pour autoriser uniquement la définition de la propriété une seule fois, mais elle ne peut pas être utilisée pour les propriétés implémentées automatiquement.

+0

Merci je l'ai fait, mais ça: Erreur Le modificateur d'accessibilité de la « MyClass.Name.set » accessor doit être plus restrictif que la propriété ou l'indexeur 'MyClass.Name' –

+4

Vous obtenez l'erreur, probablement, parce que votre propriété n'est pas publique. –

+1

Comment MyClass.Name est-il déclaré? Je suppose que ce n'est pas une chaîne publique –

2

Je sais que en utilisant le mot-clé READONLY sur un terrain vous permet d'écrire dans ce domaine une fois et il doit être seulement dans le constructeur.

1

Comme GenericTypeTea, vous êtes probablement à la recherche du mot-clé private. Cependant, juste pour être clair, rendre vos accesseurs d'ensemble privés ne le limite pas seulement au constructeur mais de toute façon dans la classe.

Pour rendre la propriété seulement du constructeur réglable que vous voulez quelque chose comme ça

public class MyClass 
{ 
    private string name; 
    public string Name {get { return name;} } 

    public MyClass(string nameString) 
    { 
    name = nameString; 
    } 
}