2013-05-25 6 views
10

Я изучаю C#, и я узнаю о том, как сделать поля частными для класса и использовать Getters и Setters для раскрытия методов вместо значений полей.Сокращенные аксессоры и мутаторы

Являются get; set; в Метод 1 и Метод 2 эквивалент? например является одним сокращением другого?

class Student 
{ 
    // Instance fields 
    private string name; 
    private int mark; 

    // Method 1 
    public string Name { get; set; } 

    // Method 2 
    public int Mark 
    { 
     get { return mark; } 
     set { mark = value; } 
    } 
} 

Наконец, будет Метод 2 используется, когда вы хотите, например, выполнить расчет перед тем, как или установить значение? например преобразование значения в процентах или выполнение проверки? например

class Student 
{ 
    // Instance fields 
    private string name; 
    private double mark; 
    private int maxMark = 50; 

    // Method 1 
    public string Name { get; set; } 

    // Method 2 
    public double Mark 
    { 
     get { return mark; } 
     set { if (mark <= maxMark) mark = value/maxMark * 100; } 
    } 
} 
+0

Посмотрите на [этот ответ] (http://stackoverflow.com/questions/15454470/why-arent-simple-properties-optimized-to-fields/15454538#15454538); он показывает что-то подробно. –

+0

Возможный дубликат [Что такое автоматические свойства в C# и какова их цель?] (Http://stackoverflow.com/questions/6001917/what-are-automatic-properties-in-c-sharp-and-what-is -назначение) –

ответ

8

Да, метод 1 является ярлыком метода 2. Я предлагаю использовать метод 1 по умолчанию. Если вам нужна дополнительная функциональность, используйте метод 2. Вы также можете указать различные модификаторы доступа для get и set.

+1

А, значит, я могу сделать что-то вроде 'protected set {if (mark <= maxMark) mark = value/maxMark * 100; } '??? – Gravy

+0

Да, это правильно. – Robin

+2

Обратите внимание, что получатель/сеттер Name не возвращает/не задает имя частной строки, а внутреннюю переменную, к которой у вас нет прямого доступа. – Bikonja

7

Да, Method2 - это путь, когда у вас есть пользовательская функция getter и setter. По умолчанию, когда вы используете Method1, внутренняя собственность будет выполняться по умолчанию. Пожалуйста, обратитесь к этому URL для получения более подробной информации.