2013-09-23 3 views
-4

Многие образцы кода в C# содержат get и set кодовые блоки. В чем их цель? Я копирую эти блоки сыворотки, они появляются в образце кода, но понятия не имеют, для чего он используется. Может кто-нибудь, пожалуйста, объясните мне это?Какова цель get: set?

+1

Недвижимость. http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx –

+0

Читайте об объектно-ориентированном программировании и [Инкапсуляция] (http://en.wikipedia.org/wiki/Encapsulation_ (объектно-ориентированное программирование)) – Habib

+0

Вы пробовали это: http://www.google.com/search?q=.net+c%23+get+set? – Olexander

ответ

0

На английском они являются сеттерами и геттерами.

Надеюсь, что вы научитесь инкапсуляции, сеттерам и геттерам, возникшим из-за инкапсуляции.

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

2
public int foo { get; set; } 

Это определяет свойство. Это в основном как публичное поле, но когда дело доходит до размышлений, все по-другому. В C# /. NET принято использовать свойства для общедоступных вещей. Вы можете сравнить его с методами getter/setter в Java.

Удивительная вещь сейчас, что вы также можете использовать обычай получить/установить код или сделать set менее заметными, чем get. Это позволяет использовать преимущества методов getter/setter без уродства вызовов методов вместо доступа к ресурсам.

public int foo { 
    get { return this.some_foo; } 
    set { this.some_foo = value; this.run_code_after_change(); } 
}; 
4

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

Вот небольшой пример: вместо этого

class Example { 
    private int x; 
    public int GetX() {return x;} 
    public void SetX(int value) { x = value;} 
} 
Example e = new Example(); 
e.SetX(123); 
Console.WriteLine("X = {0}", e.GetX()); 

они позволяют сделать это:

class Example { 
    public int X {get;set;} 
} 
Example e = new Example(); 
e.X = 123; 
Console.WriteLine("X = {0}", e.X); 

Синтаксис второго фрагмента кода легче читать, потому что X выглядит как переменная. В то же время второй фрагмент обеспечивает тот же уровень encapsulation, позволяя вам скрывать реализацию за свойством.

3

ли вы имеете в виду это ?:

public int SomeValue { get; set; } 

Это в основном синтаксический стенография для этого:

private int someValue; 
public int SomeValue 
{ 
    get { return someValue; } 
    set { someValue = value; } 
} 

Что само по себе является в основном сокращением для этого:

private int someValue; 
public int GetSomeValue() { return someValue; } 
public void SetSomeValue(int value) { someValue = value; } 

(Хотя компилятор использует разные соглашения для имен вещей, когда он это делает.)

Поскольку это относится к ООП, это инкапсуляция данных. Идея состоит в том, что объекты должны скрывать свои данные и раскрывать функциональность, а не просто подвергать данные напрямую. Поэтому вы не обязательно изменяете someValue непосредственно снаружи объекта. Вы вызываете метод на объекте и снабжаете его значением. Внутренне объект обрабатывает фактическое хранение своих данных.

0

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

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