Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
24
Добавлен:
27.02.2014
Размер:
50.69 Кб
Скачать

1)Ссылочные типы

Все ссылочные типы произведены от базового типа object, являющегося точным эквивалентом класса System.Object . Сам по себе тип object в основном используется для упаковки значений, подробно обсуждавшейся выше. Другая, более важная роль типа object заключается в том, что он является корнем для всей иерархии объектов в .NET и по умолчанию все классы унаследованы именно от System.Object . Классы могут иметь свои поля, методы, реализовывать интерфейсы и т.п. Так как классы представляют собой основной механизм организации программ и данных в C#, мы уделим им особое внимание в последующих слайдах.

Интерфейс представляет собой ссылочный тип, который может иметь только абстрактные элементы

Общая система типов (CTS)

В этой части будет описаны понятия и определены термины, облегчающие понимание общей системы типов. CTS определяет, как типы объявляются, используются и управляются во время исполнения. CTS поддерживает две категории типов, каждая из которых, в свою очередь, делиться на две большие категории: • Структурные типы – содержат локальные копии данных, а состояние структурного типа храниться в стеке или расположено непосредственно в виде участка памяти. Они могут быть как встроенные (реализуемые средой исполнения), так и определяться пользователем. • Ссылочные типы – хранят указатели на значения в адресном пространстве, и их данные расположены в области управляемой кучи. Так как переменные структурных типов хранят собственные копии данных, операции с одной переменной не влияют на другие переменные. В случае же с переменными ссылочных типов возможна ситуация, когда несколько переменных могут указывать на один и тот же объект; соответственно, операции, выполняемые с одной переменной, влияют на объект, на который указывает другая переменная. Переменные целочисленных типов и перечисления также являются структурными данными. Все типы производны от базового типа System.Object. Удаление переменных описанных типов происходит по-разному. Переменные структурных типов удаляются при выходе за область видимости переменной, а переменные ссылочных типов уничтожаются при выполнении сборки мусора.

2) Сокрытие методов. Это и есть инкапсуляция т.е. сокрытие внутренней структуры данных и реализации методов объекта от остальной программы. Другим объектам доступен лишь интерфейс объекта, через который осуществляется всё взаимодействие с ним.

class Array {

public:

void Alloc(int _len);

void Free();

inline double Elem(int i);

inline void ChangeElem(int i, double x);

protected:

int len;

double* val;

};

void Array::Alloc(int new_len)

{if (len>0) Free(); len=new_len; val=new double[new_len];}

void Array::Free() {delete [] val; len=0;}

inline double Array::Elem(int i)

{assert(i>=0 && i<len); return val[i];}

inline void Array::ChangeElem(int i, double x)

{assert(i>=0 && i<len); val[i]=x;}

Рассмотрим особенности реализации сокрытия данных в языке программирования C#.

Заметим, что в языке C# существует возможность описания объектов как экземпляров в составе подкласса с использованием зарезервированного слова new. При этом происходит сокрытие одноименных наследуемых экземпляров в подклассах.

Проиллюстрируем особенности использования механизма сокрытия данных в языке программирования C# следующим фрагментом программы:

class A {

public int x;

public void F() {

...

}

public virtual void G()

{

...

}

}

class B : A {

public new int x;

public new void F()

{

...

}

public new void G()

{

...

}

}

B b = new B();

b.x = ...;

// имеет доступ к B.x

b.F(); ... b.G();

// вызывает B.F и B.G

((A)b).x = ...;

// имеет доступ к A.x

((A)b).F();

...

((A)b).G();

// вызывает A.F и A.G

3) Для того, чтобы объявить закрытые классы и методы необходимо определить спецификатор доступа, в данном случае это private.

Соседние файлы в папке Ответы на билеты