2013-03-17 4 views
4

Я новичок, и я пытаюсь изучить основы C#. Это может показаться довольно тривиальным и может быть глупо, но это сомнение. При переходе через один из исходных кодов приложения, я увидел кусок кода внутри классаПонимание Get and Set Accessors

private string fname; 
public string FirstName 
{ 
    get 
    { 
     return fname 
    } 
    set 
    { 
     fname = value; 
    } 
} 

Может кто-нибудь сказать мне, что это значит. Я понимаю, что когда мы объявляем класс, мы получаем fname с использованием псевдонима FirstName. Если это для какой-то цели безопасности, то что?

+1

Посмотрите на статью о свойствах - http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx – alex

+3

Я думаю, что это немного не так, что iBlue должен проголосовать за то, что не знал об этом и просто спрашивая ... – Paul

+0

@ Название Westie было не лучшим, что имеет тенденцию привлекать быстрые downvotes. – psubsee2003

ответ

4

Этот код также эквивалентно:

public string FirstName { get; set; } 

Что это сделать, это определить property. В свойствах C# обеспечивается инкапсуляция для частных fields.

+1

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

+0

Но как компилятор знает, что 'FirstName' привязан к' fname'? Благодарю. – Sabuncu

+0

Какая разница, чем наличие только публичной строки FirstName; – RollRoll

0

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

Это также эквивалентно так называемая автоматической собственность, поскольку собственность на данный момент oftimedoes не добавляет никакой логики:

public string FirstName { get; set; } 
2

имя_файла является полем и имеет частную видимость, но FirstName является государственной собственностью, следовательно, будут видны вне класса и могут содержать логику внутри методов get и set

3

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

public string FirstName 
{ 
    get 
    { 
     return fname; 
    } 
    set 
    { 
     if (value.Count(s => Char.IsDigit(s)) > 0) 
     { 
      throw new Exception("Only letters allowed"); 
     } 
     fname = value; 
    } 
} 
+0

Вы получаете точку, но напомните людям, что вам не нужно вызывать 'ToCharArray' для вызова методов' IEnumerable'. – ChaosPandion

+0

OK ... я получаю, но как вы реализуете вышеуказанный код, если это похоже на эту общедоступную строку FirstName {get; задавать; } – iJade

+0

@ChaosPandion да, вы правы. Я обновил ответ. –

0

получить и установить методы называются Accessors (получатели) и мутаторы (сеттера) эти методы используются для доступа и мутировать атрибуты объекта, не допуская доступ извне класса. Посмотрите, что модификатор доступа переменной fname является закрытым, что означает, что к нему можно получить доступ только любым способом внутри класса.

и обратите внимание, что методам get и set обычно должен быть присвоен модификатор открытого доступа, который позволяет получить доступ к методу из любого внешнего класса.

Смежные вопросы