2010-10-14 20 views
2

S'il y a le code suivant dans une classe, les méthodes get et set sont-elles associées à la variable? Comment puis-je accéder à get et set avec une instance de la classe?Question rapide à propos de Get and Set

public string Something { get; set; } 
+3

non c'est ce qu'on appelle une propriété automatique (magie) – kenny

Répondre

4

Cette syntaxe est livré avec .Net Framework 3.5 (automatique propriété)

Il est comme:

private string something; 
public string Something 
{ 
    get { return something; } 
    set { something = value; } 
} 

Pour accéder à cette variable (supposée être dans une classe MyClass):

// GET 
    MyClass myObj = new MyClass(); 
    string test = myObj.Something; 
// SET 
    myObj.Something = "blabla"; 
5

Ceci est essentiellement une astuce de compilateur. Lorsque vous compilez le code, le compilateur génère un champ caché et le code nécessaire pour retourner et définir le champ dans le get et le set.

Vous accéderiez à cette propriété comme si vous accédiez à une autre propriété. MyClass.Something = "bla".

1

Ceci est une propriété automatique, qui crée un champ de sauvegarde dans le compilateur, pour lequel vous n'avez pas besoin d'écrire de code.

get:

var str = instance.Something; 

ensemble:

instance.Something = "new value"; 
0

Une variable de support avec getter et setter (*) sont créés pour vous par le compilateur, mais vous ne les voyez pas dans votre code standard. Vous accédez simplement à la propriété directement.

myClass.Something = "blah"; // uses set 
string myValue = myClass.Something; // uses get; 

* Ces méthodes sont créées pour les propriétés plutôt qu'elles sont implémentées automatiquement ou non. La variable de support générée par le compilateur est ajoutée au mélange dans le cas d'une propriété implémentée automatiquement.

+0

ne pouvez-vous pas utiliser ce code sans spécifier {get; set;}? Je suis bien cornfuse – sooprise

+0

@Soo: Oui, cela définirait un champ public tel que 'chaîne publique Quelque chose;'. La différence est qu'avec les propriétés, vous * pouvez * (explicitement) avoir des variables de support, vous * pourriez * avoir une validation dans un setter, vous * pourriez * avoir des modificateurs d'accès différents pour get et set (donc peut-être que le code externe mais seulement la classe elle-même pourrait le définir), ou des combinaisons de ce qui précède et d'autres choses que je n'ai pas mentionnées. L'approche préférée consiste à exposer des données via des propriétés et non via des champs. –

0

C'est comme le code ci-dessous, mais beaucoup moins de frappes :-)

public string Something { 
    get() { 
     return _Something; 
    } 
    set(string value) { 
     _Something = value; 
    } 
} 
+1

Quelle langue est-ce? –

+0

Je ne sais pas, mais il semble très sacrément génial si vous me demandez lol –

+0

n'oubliez pas de déclarer votre _Something variable ;-) – Spilarix

1
  1. Il est une nouvelle fonctionnalité de compilateur
  2. Il est appelé Propriétés automatique
  3. Vous n'avez pas besoin de définir un magasin de support pour les propriétés automatiques, le compilateur fait ça travail pour vous.
  4. Vous ne pouvez pas injecter de code personnalisé dans les propriétés automatiques, vous devez revenir au style de propriétés de déclaration 1.1 normal.
  5. Vous pouvez accéder aux propriétés automatiques que vous accédez aux propriétés normales
0

Le compilateur se présente:

public string Something { get; set; } 

Dans quelque chose comme ça (en IL, converti en C# pour votre commodité):

string _something; 
public string get_Something() { return _something; } 
public void set_Something(string value) { _something = value; } 

En outre, le compilateur transforme ces lignes:

Something = "test"; 
var result = Something; 

Dans ceci:

set_Something("test"); 
var result = get_Something(); 

Donc, vous voyez, il est tout appels de méthode sous (comme en Java), mais il est vraiment sweet d'avoir la syntaxe de la propriété en C#. Mais si vous essayez d'appeler ces méthodes directement, vous obtenez un error.