Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Prog_Guide.doc
Скачиваний:
16
Добавлен:
16.11.2019
Размер:
6.22 Mб
Скачать

Метод доступа get

Основная часть метода доступа get похожа на основную часть метода. Она должна возвращать значение типа свойства. Выполнение метода доступа get эквивалентно считыванию значения поля. Например, когда возвращается частная переменная из метода доступа get и разрешена оптимизация, вызов метода доступа get встраивается компилятором, что позволяет избежать ненужных затрат на вызов метода. Однако виртуальный метод доступа get не может быть встроен, поскольку во время компиляции у компилятора нет данных о том, какой метод может быть вызван во время выполнения. Ниже приведен метод доступа get, который возвращает значение частного поля name:

----

При создании ссылки на свойство, кроме случая присвоения ему значения, для чтения значения свойства вызывается метод доступа get. Пример.

Person p1 = new Person();

//...

System.Console.Write(p1.Name); // the get accessor is invoked here

The get accessor must end in a return or throw statement, and control cannot flow off the accessor body.

It is a bad programming style to change the state of the object by using the get accessor. For example, the following accessor produces the side effect of changing the state of the object every time that the number field is accessed.

private int number;

public int Number

{

get

{

return number++; // Don't do this

}

}

The get accessor can be used to return the field value or to compute it and return it. For example:

class Employee

{

private string name;

public string Name

{

get

{

return name != null ? name : "NA";

}

}

}

In the previous code segment, if you do not assign a value to the Name property, it will return the value NA.

Метод доступа get должен заканчиваться оператором return или throw, а элемент управления не должен выходить за основную часть метода доступа.

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

private int number;

public int Number

{

get

{

return number++; // Don't do this

}

}

Метод доступа get можно использовать для возвращения значения поля или для вычисления и возвращения этого значения. Пример.

class Employee

{

private string name;

public string Name

{

get

{

return name != null ? name : "NA";

}

}

}

Если в предыдущем фрагменте кода свойству Name не назначается какое-либо значение, это свойство возвращает значение "NA".

The set Accessor

The set accessor resembles a method whose return type is void. It uses an implicit parameter called value, whose type is the type of the property. In the following example, a set accessor is added to the Name property:

class Person

{

private string name; // the name field

public string Name // the Name property

{

get

{

return name;

}

set

{

name = value;

}

}

}

When you assign a value to the property, the set accessor is invoked by using an argument that provides the new value. For example:

Person p1 = new Person();

p1.Name = "Joe"; // the set accessor is invoked here

System.Console.Write(p1.Name); // the get accessor is invoked here

It is an error to use the implicit parameter name, value, for a local variable declaration in a set accessor.