Быстрый вопрос о получении и установке - PullRequest
2 голосов
/ 14 октября 2010

Если в классе есть следующий код, ассоциированы ли методы get и set с переменной?Как я могу получить доступ и получить с экземпляром класса?

public string Something { get; set; }

Ответы [ 7 ]

5 голосов
/ 14 октября 2010

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

Вы бы получили доступ к этому свойству так же, как и к любому другому. MyClass.Something = "bla".

4 голосов
/ 14 октября 2010

Этот синтаксис поставляется с .Net Framework 3.5 (автоматическое свойство)

Это как:

private string something;
public string Something
{
     get { return something; }
     set { something = value; }
}

Чтобы получить доступ к этой переменной (должен быть в классе MyClass):

// GET
    MyClass myObj = new MyClass();
    string test = myObj.Something;
// SET
    myObj.Something = "blabla";
1 голос
/ 14 октября 2010
  1. Это новая функция компилятора
  2. Это называется Автоматические свойства
  3. Вам не нужно определять резервное хранилище для автоматических свойств, компилятор сделает эту работу за вас.
  4. Вы не можете внедрить пользовательский код в автоматические свойства, вам нужно вернуться к обычному стилю объявления свойств 1.1.
  5. Вы можете получить доступ к автоматическим свойствам при доступе к обычным свойствам
1 голос
/ 14 октября 2010

Это авто-свойство, которое создает вспомогательное поле в компиляторе, для которого вам не нужно писать код.

get:

var str = instance.Something;

set:

instance.Something = "new value";
0 голосов
/ 14 октября 2010

Компилятор превращает это:

public string Something { get; set; } 

В что-то вроде этого (в IL, для вашего удобства преобразовано в C #):

string _something;
public string get_Something() { return _something; }
public void set_Something(string value) { _something = value; } 

Также компилятор переворачивает эти строки:

Something = "test";
var result = Something;

В это:

set_Something("test");
var result = get_Something();

Итак, вы видите, что все вызовы методов ниже (как в Java), но на самом деле мило иметь синтаксис свойства в C #. Но если вы попытаетесь вызвать эти методы напрямую, вы получите error .

0 голосов
/ 14 октября 2010

Это похоже на код ниже, но гораздо меньше нажатий клавиш: -)

public string Something {
    get() {
        return _Something;
    }
    set(string value) {
        _Something = value;
    }
}
0 голосов
/ 14 октября 2010

Компилятор создает для вас вспомогательную переменную в комплекте с методами получения и установки (*), но вы не увидите их в своем стандартном коде.Вы бы просто обратились к свойству напрямую.

myClass.Something = "blah"; // uses set
string myValue = myClass.Something; // uses get;

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

...