2010-03-01 6 views
12

J'essaie de définir les propriétés de classe qui ne peuvent être définies que par le constructeur de la même classe.Définir les propriétés d'une classe uniquement via le constructeur

+0

Salut, la question est un peu vague, vous n'avez pas mentionné quel langage de programmation vous êtes roi à propos et les étiquettes choisies sont pauvres. Pouvez-vous s'il vous plaît éditer et clarifier/élaborer plus? – BalusC

+0

Quelle langue? Avez-vous essayé Google? C'est une partie assez basique de n'importe quelle langue. – noah

Répondre

8

Faire les propriétés ont readonly champs sauvegarde:

public class Thing 
{ 
    private readonly string _value; 

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

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

Hey David merci pour une réponse rapide, vous pensez que cela fait que les propriétés de la classe seulement définies par le constructeur –

+1

Oui, c'est le cas. Si vous utilisez C#, veuillez mettre à jour vos tags sur votre message d'origine pour être plus clair. Cette réponse suppose que vous utilisez C#. Si ce n'est pas le cas, veuillez ajouter une étiquette avec le langage de programmation que vous utilisez, afin que les gens puissent comprendre la question plus clairement. –

20

This page from Microsoft décrit comment réaliser définir une propriété seulement du constructeur.

Vous pouvez créer une propriété immuable de deux manières. Vous pouvez déclarer le set accessor.pour être privé. La propriété est seulement réglable dans le type , mais elle est immuable pour les consommateurs. Vous pouvez à la place déclarer seulement l'accesseur get, ce qui rend la propriété immutable partout sauf dans le constructeur du type.

En C# 6.0 inclus avec Visual Studio 2015, il y a eu une modification qui permet de définir des propriétés get only à partir du constructeur. Et seulement du constructeur.

Le code pourrait donc être simplifié à juste obtenir que la propriété:

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

    public string Value { get; } 
} 
1

La manière correcte est:

public string MyProperty{ get; private set; } 

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

MyProperty peut être modifié par n'importe quelle méthode de la même classe. – mayu

Questions connexes