2009-08-21 11 views

Antwort

40

Es ist eine Abkürzung für:

private string _name; 

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

Der Compiler erzeugt die Elementvariablen. Dies wird automatic property genannt.

+9

... obwohl der Name des Feldes tatsächlich ein "unaussprechlicher" Name ist (z. B. '<> __ name'), der als C# -Kennung ungültig ist. Dies verhindert, dass Sie direkt von Ihrem Code auf das Feld zugreifen. Der Spezifikationsbegriff ist "automatisch implementiertes Eigentum", aber die meisten Leute nennen es tatsächlich eine automatische Eigenschaft :) –

+0

@phoog: Sicher meinst du 'Pedantismus' (oder wie Mark darauf hingewiesen hat - 'Pedanterie')? : D – stuxnetting

+0

@stuxnetting "Pedanterie" war ein Witz. Ich sag bloß'. Für die Aufzeichnung und alles. – phoog

10

Es ist eine automatische Lese-Schreib-Eigenschaft. Es ist ein C# 3.0-Zusatz. Etwas wie:

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

mit der Ausnahme, dass Sie nicht direkt auf das Hintergrundfeld zugreifen können.

3

Es ist die equivilent tun:

private string _Text; 

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

Außer Sie keinen Zugriff auf die private Variable haben, während in der Klasse.

+1

Also, wenn Sie die private Variable behalten möchten, müssen Sie das "alte" Format verwenden (wie in Ihrem Beispiel)? – Rado

4

Es heißt eine Auto-Implementierte Eigenschaft und ist new to C# 3.0. Es ist eine sauberere Syntax, wenn Ihr Zugriff auf die Eigenschaft kein spezielles Verhalten oder keine Validierung erfordert. Es ist in seiner Funktion ähnlich:

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

So ist es eine ganze Menge Code speichert, sondern lässt Sie die Möglichkeit, später die Zugriffslogik ändern, wenn das Verhalten oder Regeln ändern müssen.

1

Auto-Implemented Properties

Zusammenfassung: In C# 3.0 und später automatisch implementierte Eigenschaften machen Eigenschaft Deklaration prägnanter, wenn keine zusätzliche Logik in den Eigenschaftenaccessoren erforderlich ist.

25

In einfachen Worten werden sie als Eigentum Accessoren bezeichnet. Ihre Umsetzung kann wie folgt

1.Get {return name} Der Codeblock in der get-Accessor erläutert wird ausgeführt, wenn die Eigenschaft Lesen.

2.set {Name = Wert} Der Codeblock im Set-Accessor wird ausgeführt, wenn die Eigenschaft Assigned einen neuen Wert zugewiesen ist.

Eg.(Vorausgesetzt, dass Sie C# verwenden)

class Person 
{ 
    private string name; // the name field 
    public string Name // the Name property 
    { 
     get 
     { 
      return name; 
     } 
     set 
     { 
      name = value; 
     } 
    } 
} 
  1. Nun, wenn Sie auf diese Eigenschaft verweisen, wie unten

    Person p = new Person(); // Instanzieren der Klasse oder ein Objekt zu schaffen ' p‘der Klasse 'Person'

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

Der Get Accessor wird aufgerufen Lesen der Wert der Eigenschaft, dass der Compiler versucht, den Wert der Zeichenfolge 'Name' zu lesen.

2.When Sie Wert (mit einem Argument) auf die Eigenschaft 'Name' zuweisen, wie unten

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 

Das Set Accessor Ordnet der Wert ‚Stack“ auf die ‚Eigenschaft Name dh 'Stack' wird in der Zeichenfolge 'Name' gespeichert

Ouput.

Stapel

+6

Was ist der Grund dafür, dass man überhaupt ein und ausgeht, warum man nicht nur einen Accessor für Setting und Getting benutzt, so scheint diese Frage niemand zu beantworten. – JsonStatham