2009-08-21 8 views

Répondre

40

Il est un raccourci pour:

private string _name; 

public string Name 
{ 
    get { return _name; } 
    set { _name = value; } 
} 

Le compilateur génère la variable membre. C'est ce qu'on appelle un automatic property.

+9

... bien que le nom du champ soit en fait un nom "indicible" (par exemple '<> __ name') qui n'est pas valide en tant qu'identificateur C#. Cela vous empêche d'accéder directement au champ depuis votre code. Le terme de spécification est "propriété implémentée automatiquement" mais la plupart des gens l'appellent en effet une propriété automatique :) –

+0

@phoog: Vous vouliez sûrement dire 'pédantisme' (ou comme Mark l'a souligné - 'pedantry')? : D – stuxnetting

+0

@stuxnetting "pedantryism" était une blague. Dites juste. Pour l'enregistrement et tout. – phoog

10

C'est une propriété automatique de lecture-écriture. C'est un ajout C# 3.0. Quelque chose comme:

public class Car { 
    private string name; 
    public string Name { get { return name; } set { name = value; } } 
} 

sauf que vous ne pouvez pas accéder directement au champ de support.

3

Il est le equivilent de faire:

private string _Text; 

public string Text 
{ 
    get { return _Text; } 
    set { _Text = value; } 
} 

Sauf que vous n'ont pas accès à la variable privée tandis qu'à l'intérieur de la classe.

+1

Donc, si vous voulez garder la variable privée, vous devez utiliser le "vieux" format (comme dans votre exemple)? – Rado

4

Cela s'appelle une propriété implémentée automatiquement et est new to C# 3.0. C'est une syntaxe plus propre lorsque votre accès à la propriété n'a pas besoin de comportement particulier ou de validation. Il est similaire en fonction:

public class Car 
{ 
    private string _name; 
    public string Name 
    { 
    get { return _name; } 
    set {_name = value; } 
    } 
} 

Il permet d'économiser une bonne quantité de code, mais vous laisse plus tard la possibilité de modifier la logique accesseur si le comportement ou les règles doivent changer.

1

Auto-Implemented Properties

RÉSUMÉ: Dans C# 3.0 et versions ultérieures, les propriétés implémentées automatiquement faire propriété déclaration plus concise lorsque aucune logique supplémentaire est nécessaire dans les accesseurs de propriété.

25

En termes simples, ils sont appelés accesseurs de propriété. Leur mise en œuvre peut être expliquée comme ci-dessous

1.get {nom de retour} Le bloc de code dans l'accesseur get est exécutée lorsque la propriété est Lire.

2.set {nom = valeur} Le bloc de code dans l'accesseur set est exécuté lorsque la propriété est Affecté une nouvelle valeur.

Par exemple.(En supposant que vous utilisez C#)

class Person 
{ 
    private string name; // the name field 
    public string Name // the Name property 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
     } 
    } 
} 
  1. Maintenant, quand vous faites référence à cette propriété comme ci-dessous

    Personne p = new Person(); // instanciation la classe ou la création d'objet ' p » de la classe 'personne'

    System.Console.Write(p.Name); //The get accessor is invoked here 
    

L'accesseur get est appelé Read la valeur de la propriété, c'est-à-dire que le compilateur essaie de lire la valeur de la chaîne 'name'.

2.Lorsque vous Affecter une valeur (en utilisant un argument) à la propriété « Nom » comme ci-dessous

Person p = new Person(); 
p.Name = "Stack" // the set accessor is invoked here 
Console.Writeline(p.Name) //invokes the get accessor 
Console.ReadKey(); //Holds the output until a key is pressed 

L'ensemble accesseur Affecte la valeur « Stack » à la « c.-à-propriété Name 'Stack' est stocké dans la chaîne 'name'

Ouput.

Stack

+6

Quelle est la raison d'avoir un get et un set en premier lieu, pourquoi ne pas simplement utiliser un accesseur à la fois pour définir et obtenir, c'est la question que personne ne semble capable de répondre en termes simples. – JsonStatham

Questions connexes