C # Получить / Установить использование синтаксиса - PullRequest
32 голосов
/ 11 января 2011

Это объявления для класса Person.

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

Как мне использовать get / set?В основном я создаю

Person Tom = new Person();

Как Tom.set / get ??

Я использую стиль C ++, где вы просто записываете int getAge () и void setAge() функции.Но в C # есть ярлыки обработки get и set?

Ответы [ 7 ]

71 голосов
/ 11 января 2011

Предполагая, что у вас есть доступ к ним (объявленные вами свойства protected), вы используете их следующим образом:

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

Это свойства .Это в основном пары методов получения / установки (хотя вы можете иметь только метод получения или установки) с соответствующими метаданными.В качестве примера вы привели автоматически реализованные свойства , где компилятор добавляет вспомогательное поле.Вы можете написать код самостоятельно, хотя.Например, объявленное вами свойство Title выглядит следующим образом:

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

... за исключением того, что поле поддержки имеет «невыразимое имя» - то, на которое вы не можете ссылаться в своемКод C #Вы вынуждены пройти через само свойство.

Вы можете сделать одну часть свойства более ограниченной, чем другую.Например, это довольно часто встречается:

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

или как автоматически реализованное свойство:

public string Foo { get; private set; }

Здесь "getter" является общедоступным, а "setter" является частным.

3 голосов
/ 07 августа 2012

Предполагая, что у вас есть класс песни (вы можете обратиться ниже), традиционная реализация будет выглядеть следующим образом

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

Теперь рассмотрим реализацию этого класса.

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

Вваш класс 'Main', вы будете писать свой код как

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

Обратите внимание:

Метод, который вы устанавливаете / получаете, должен быть публичным или защищенным (заботиться), но строго не долженбыть личным.

2 голосов
/ 11 января 2011

Это свойства .Вы бы использовали их так:

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

Но, учитывая, что они объявлены protected, их видимость может быть проблемой

1 голос
/ 11 января 2011

Кстати, в C # 3.5 вы можете создать экземпляр свойств вашего объекта следующим образом:

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

Но опять же, свойства должны быть открытыми.

0 голосов
/ 01 февраля 2014

Я не понимаю, что это неясно

Свойства - это элементы, которые предоставляют гибкий механизм для чтения, записи или вычисления значений приватных полей.Свойства можно использовать так, как будто они являются открытыми членами данных, но на самом деле это специальные методы, называемые методами доступа.Это позволяет легко получать доступ к данным, в то же время обеспечивая безопасность и гибкость методов.

В этом примере класс TimePeriod хранит период времени.Внутри класс хранит время в секундах, но предоставляется свойство под названием «Часы», которое позволяет клиенту указывать время в часах.Средства доступа к свойству Hours выполняют преобразование между часами и секундами.

Пример

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

Обзор свойств

Свойства позволяют классу предоставлять общедоступный способ получения и установки значений, скрывая при этом код реализации или проверки.

A get Метод доступа к свойству используется для возврата значения свойства, а set accessor используется для назначения нового значения.Эти средства доступа могут иметь разные уровни доступа.

Ключевое слово value используется для определения значения, назначаемого индексатором набора.

Свойства, которые не реализуют метод набора, доступны только для чтения.

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

0 голосов
/ 11 января 2011

Вы не можете получить доступ к этим свойствам, так как они помечены как protected, что означает:

Доступ к типу или элементу возможен только с помощью кода в том же классеили структура, или в классе, который является производным от этого класса.

0 голосов
/ 11 января 2011

Установите их для публики. То есть там, где у вас есть слово «защищенный», измените его на слово «публичный». Если вам нужен контроль доступа, поместите его внутрь, перед словом «получить» или словом «набор».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...