Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ProgBasics_lec05-6_class_members

.pdf
Скачиваний:
7
Добавлен:
14.04.2015
Размер:
480.56 Кб
Скачать

usage

Button okButton = new Button(); okButton.Caption = "OK"; // Invokes set accessor string s = okButton.Caption; // Invokes get accessor

Автоматические свойства

Можно не объявлять поле вручную – это сделает компилятор

Можно нарушить инкапсуляцию

Возможный компромисс

public string Name

{

get; private set;

}

Модификаторы доступа

public – элемент виден везде

internal - элемент виден в пределах сборки

protected internal – элемент видел в пределах сборки или наследникам в другой

protected – элемент виден потомкам (1 уровень иерархии)

private – элемент виден внутри типа, в котором описан

static & instance members

instance members – экземплярные элементы класса – принадлежат объекту (экземпляру класса, instance)

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

Все элементы типов по-умолчанию – instance

Чтобы объявить static-элемент, необходимо использовать модификатор static.

Обращаться к static-элементам можно, используя имя типа: например, класс E, в нём

M – static-свойство. Usage: E.M;

static-поле (non-generic!) хранится всегда в одном месте в памяти

Нельзя из static-методов обращаться к экземплярным элементам (по ссылке this).

static-конструкторы

могут быть только private

могут быть external

нельзя вызвать вручную

в общем случае срабатывают

перед первым обращением к статическому элементу

перед созданием экземпляра класса

instance members

Доступ осуществляется обращением к объекту (instance), для класса которого определён элемент.

Каждый экземпляр класса содержит свой набор полей.

Instance-элементы могут быть доступны при помощи this, из тела instance-метода можно обратиться к static-элементу.

class Test

{

int x; static int y; void F()

{

x = 1; // Ok, this.x = 1 y = 1; // Ok, Test.y = 1

}

static void G()

{

x = 1; // Error, cannot access this.x y = 1; // Ok, same as Test.y = 1

}

static void Main()

{

Test t = new Test(); t.x = 1; // Ok

t.y = 1; // Error, cannot access static member through instance Test.x = 1; // Error, cannot access instance member through type Test.y = 1; // Ok

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]