Подтвердить что ты не робот

С# Get/Set Использование синтаксиса

Это объявления для класса 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??

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

public string Foo { get; private set; }

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

Ответ 2

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

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

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

Ответ 3

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

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

В вашем классе "Главная" вы написали свой код как

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

Точка, которую нужно отметить;

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

Ответ 4

Кстати, в С# 3.5 вы можете создавать свойства объекта так:

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

Но снова свойства должны быть общедоступными.

Ответ 5

Установите их на всеобщее обозрение. То есть, везде, где у вас есть слово "protected", измените его на слово "public". Если вам нужен контроль доступа, поставьте его внутри, перед словом "get" или словом "set".

Ответ 6

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

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

Ответ 7

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

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

В этом примере класс 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);
    }
}

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

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

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

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

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