Użycie Składni C# Get/Set

Są to deklaracje dla klasy Person.

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

Jak korzystać z get / set? In main, i instantiate a

Person Tom = new Person();
Jak Tom.set/get??

Używam do robienia stylu C++, gdzie po prostu wypisujesz funkcje int getAge () i void setAge (). Ale w C# są skróty obsługujące get I set?

Author: amalgamate, 2011-01-11

7 answers

Zakładając, że masz do nich dostęp (zadeklarowane właściwości to protected), używasz ich w następujący sposób:

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

Są to właściwości. Są to w zasadzie pary metod getter / setter (chociaż możesz mieć tylko getter lub tylko setter) z odpowiednimi metadanymi. Przykład, który podałeś, to automatycznie zaimplementowane właściwości, gdzie kompilator dodaje pole zapasowe. Możesz jednak sam napisać kod. Na przykład, Title nieruchomość, którą zadeklarowałeś, wygląda tak:

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

... poza tym, że pole to ma "niewypowiedzianą nazwę" - taką, do której nie możesz się odwołać w kodzie C#. Jesteś zmuszony przejść przez samą posiadłość.

Możesz sprawić, że jedna część nieruchomości będzie bardziej ograniczona niż druga. Na przykład jest to dość powszechne:

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

Lub jako automatycznie zaimplementowana właściwość:

public string Foo { get; private set; }

Tutaj "getter" jest publiczny, ale "setter" jest prywatny.

 71
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-11 20:47:39

Są to właściwości . Tak byś ich używał:

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

Ale biorąc pod uwagę, że są zadeklarowane protected ich widoczność może być niepokojąca.

 2
Author: Gavin H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-11 20:47:56

Zakładając, że masz klasę piosenki (możesz odwołać się poniżej), tradycyjna implementacja będzie wyglądać następująco

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

Rozważmy implementację tej klasy.

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

W klasie "Main", będziesz pisał swój kod jako

    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);
      }
    }

Punkt do odnotowania;

Ustawiona metoda / get powinna być Publiczna lub chroniona (dbać), ale ściśle nie powinna być prywatna.

 2
Author: now he who must not be named.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-05 00:23:29

Nawiasem mówiąc, w C# 3.5 możesz utworzyć instancję właściwości obiektu w następujący sposób:

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

Ale znowu, właściwości muszą być publiczne.

 1
Author: Nickolodeon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-31 10:41:53

Ustaw je na publiczne. Oznacza to, że gdziekolwiek masz słowo "chronione", zmień je na słowo "publiczne". Jeśli potrzebujesz kontroli dostępu, umieść ją w środku, przed słowem " get "lub słowem "set".

 0
Author: GWLlosa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-11 20:50:13

Nie masz dostępu do tych właściwości, ponieważ są one oznaczone jako protected Znaczenie:

Do typu lub elementu można uzyskać dostęp tylko za pomocą kodu w tej samej klasie lub strukturze, lub w klasie, która pochodzi z tej klasy.

 0
Author: Anders Arpi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-11 20:50:36

Nie rozumiem, co to jest niejasne

Właściwości to elementy składowe, które zapewniają elastyczny mechanizm odczytu, zapisu lub obliczania wartości pól prywatnych. Właściwości mogą być używane tak, jakby były publicznymi członkami danych, ale w rzeczywistości są to specjalne metody zwane accessorami. Umożliwia to łatwy dostęp do danych, jednocześnie zapewniając bezpieczeństwo i elastyczność metod.

W tym przykładzie Klasa TimePeriod przechowuje przedział czasu. Wewnętrznie Klasa przechowuje czas w sekundach, ale zapewniona jest właściwość o nazwie Hours, która pozwala klientowi określić czas w godzinach. Accessors dla właściwości Hours wykonują konwersję między godzinami i sekundami.

Przykład

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);
    }
}

Przegląd Właściwości

Właściwości umożliwiają klasie ujawnienie publicznego sposobu pobierania i ustawiania wartości, ukrywając jednocześnie implementację lub kod weryfikacyjny.

A get property accessor jest używany do zwrotu nieruchomości wartość, a do przypisania nowej wartości używany jest akcesor set . Te akcesoria mogą mieć różne poziomy dostępu.

Słowo kluczowe value jest używane do określenia wartości przypisanej przez indeksator set.

Właściwości, które nie implementują metody set są tylko do odczytu.

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

 0
Author: Ivan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-31 22:07:13