wake-up-neo.com

C # Get/Set Syntax Usage

Dies sind Deklarationen für eine Personenklasse. 

protected int ID { get; set; }
protected string Title { get; set; }
protected string Description { get; set; }
protected TimeSpan jobLength { get; set; }

Wie gehe ich mit dem get/set um? In der Hauptsache instanziiere ich ein 

Person Tom = new Person();

Wie kommt Tom.set /?

Ich bin es gewohnt, im C++ - Stil zu arbeiten, in dem Sie einfach die Funktionen int getAge () und void setAge () schreiben. Aber in C # gibt es Tastenkombinationen, die get und set werden? 

32
RoR

Vorausgesetzt, Sie haben Zugriff auf sie (die von Ihnen deklarierten Eigenschaften sind protected), verwenden Sie sie wie folgt:

Person tom = new Person();
tom.Title = "A title";
string hisTitle = tom.Title;

Dies sind properties . Sie sind im Grunde Paare von Getter/Setter-Methoden (obwohl Sie nur einen Getter oder einen Setter haben können) mit entsprechenden Metadaten. Das von Ihnen gegebene Beispiel ist automatisch implementierte Eigenschaften, bei denen der Compiler ein Backing-Feld hinzufügt. Sie können den Code jedoch selbst schreiben. Die von Ihnen deklarierte Title-Eigenschaft sieht beispielsweise so aus:

private string title; // Backing field
protected string Title
{
    get { return title; }  // Getter
    set { title = value; } // Setter
}

... außer dass das Hintergrundfeld einen "unaussprechlichen Namen" erhält - auf den Sie in Ihrem C # -Code nicht verweisen können. Sie sind gezwungen, durch das Grundstück selbst zu gehen.

Sie können einen Teil einer Eigenschaft stärker einschränken als einen anderen. Das ist zum Beispiel ziemlich üblich:

private string foo;
public string Foo
{
    get { return foo; }
    private set { foo = value; }
}

oder als automatisch implementierte Eigenschaft:

public string Foo { get; private set; }

Hier ist der "Getter" öffentlich, aber der "Setter" ist privat.

71
Jon Skeet

Angenommen, Sie haben eine Liedklasse (die Sie weiter unten beziehen können) wäre die traditionelle Implementierung wie folgt

 class Song
  {
       private String author_name;
       public String setauthorname(String X) {}; //implementation goes here
       public String getauthorname() {}; //implementation goes here
  }

Betrachten Sie nun diese Klassenimplementierung.

      class Song 
      {
            private String author_name;
            public String Author_Name
            { 
                 get { return author_name; }
                set { author_name= value; }
             }
      }

In Ihrer "Main" -Klasse schreiben Sie Ihren Code als

    class TestSong
    { 
      public static void Main(String[] Args)
      {
          Song _song = new Song(); //create an object for class 'Song'    
          _song.Author_Name = 'John Biley';
          String author = _song.Author_Name;           
          Console.WriteLine("Authorname = {0}"+author);
      }
    }

Zu beachtender Punkt;

Die Methode, die Sie festlegen/erhalten, sollte öffentlich oder geschützt sein (Vorsicht), aber streng genommen nicht privat sein.

Dies sind Eigenschaften . Sie würden sie gerne so verwenden:

Tom.Title = "Accountant";
string desc = Tom.Description;

Aber wenn man bedenkt, dass sie als protected deklariert werden, kann ihre Sichtbarkeit ein Problem sein. 

2
Gavin H

In C # 3.5 können Sie die Eigenschaften Ihres Objekts übrigens wie folgt instanziieren:

Person TOM=new Person 
{ 
   title = "My title", ID = 1 
};

Aber auch hier müssen Immobilien öffentlich sein.

1
Nickolodeon

Ich verstehe nicht, was das ist unklar

Eigenschaften sind Member, die einen flexiblen Mechanismus zum Lesen, Schreiben oder Berechnen der Werte privater Felder bereitstellen. Eigenschaften können verwendet werden, als wären sie öffentliche Datenelemente, es handelt sich jedoch eigentlich um spezielle Methoden, die als Zugriffsmethoden bezeichnet werden. Dies ermöglicht den einfachen Zugriff auf Daten und bietet gleichzeitig die Sicherheit und Flexibilität der Methoden.

In diesem Beispiel speichert die Klasse TimePeriod einen Zeitraum. Intern speichert die Klasse die Zeit in Sekunden. Es wird jedoch eine Eigenschaft namens Stunden bereitgestellt, mit der ein Client eine Zeit in Stunden angeben kann. Die Zugriffsmethoden für die Eigenschaft "Stunden" führen die Konvertierung zwischen Stunden und Sekunden durch.

Beispiel

class TimePeriod
{
    private double seconds;

    public double Hours
    {
        get { return seconds / 3600; }
        set { seconds = value * 3600; }
    }
}

class Program
{
    static void Main()
    {
        TimePeriod t = new TimePeriod();

        // Assigning the Hours property causes the 'set' accessor to be called.
        t.Hours = 24;

        // Evaluating the Hours property causes the 'get' accessor to be called.
        System.Console.WriteLine("Time in hours: " + t.Hours);
    }
}

Eigenschaftenübersicht

Mithilfe von Eigenschaften kann eine Klasse eine öffentliche Methode zum Abrufen und Festlegen von Werten verfügbar machen, während Implementierungs- oder Überprüfungscode ausgeblendet wird.

Ein Eigenschafts-Accessor get wird verwendet, um den Eigenschaftswert zurückzugeben, und ein Accessor set wird zum Zuweisen eines neuen Werts verwendet. Diese Accessoren können unterschiedliche Zugriffsebenen haben.

Mit dem Schlüsselwort value wird der Wert festgelegt, der vom Mengenindexer zugewiesen wird.

Eigenschaften, die keine set-Methode implementieren, sind schreibgeschützt.

http://msdn.Microsoft.com/en-US/library/x9fsa0sw%28v=vs.80%29.aspx

0
Ivan

Stellen Sie sie an die Öffentlichkeit. Wo immer Sie das Wort "geschützt" haben, ändern Sie es für das Wort "öffentlich". Wenn Sie eine Zugriffskontrolle benötigen, setzen Sie sie in das Wort "get" oder "set".

0
GWLlosa

Sie können nicht auf diese Eigenschaften zugreifen, da sie als protected Bedeutung gekennzeichnet sind:

Auf den Typ oder Member kann nur durch Code in derselben Klasse oder Struktur oder in einer Klasse zugegriffen werden, die von dieser Klasse abgeleitet ist.

0
Anders Arpi