Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Заочники_АСОИ / Лекции / 01 Классы / Объекты и типы.docx
Скачиваний:
20
Добавлен:
29.02.2016
Размер:
97.14 Кб
Скачать

Конструкторы структур

Объявлять конструкторы структур можно точно так же, как это делается для классов, за исключением того, что не разрешено определять конструкторы без параметров. Это мо­жет показаться бессмысленным, но причина кроется в реализации исполняющей среды .NET. Бывают некоторые редкие случаи, когда .NET не в состоянии вызвать определенный вами конструктор без параметров. В Microsoft двинулись по пути наименьшего сопротивле­ния, просто запретив пользовательские конструкторы без параметров для структур в С#.

Таким образом, конструктор по умолчанию, который инициализирует все поля нулевы­ми значениями, всегда присутствует неявно, даже если применяются другие конструкторы с параметрами. Также невозможно обойти конструктор по умолчанию, определяя началь­ные значения полей. Следующий код вызовет ошибку компиляции:

struct Dimensions

{

public double Length = 1;

// Ошибка. Начальные значения не разрешены,

public double Width = 2;

// Ошибка. Начальные значения не разрешены.

}

Конечно, если бы Dimensions была объявлена классом, этот код скомпилировался бы без проблем.

Аналогично, структуру можно снабдить методом Close() или Dispose()  так же, как это делается с классами.

Частичные классы

Ключевое слово partial (частичный) позволяет определить класс, структуру или ин­терфейс, распределенный по нескольким файлам. Однако в ситуации, когда множеству разработчиков требуется доступ к одному и тому же классу, или же (что более вероятно) в ситуации, когда некоторый генератор кода генерирует часть класса, такое разделение класса на несколько файлов может оказаться полезным.

Ключевое слово partial просто помещается перед классом, структурой или интер­фейсом. В следующем примере класс TheBigClass размещается в двух отдельных файлах: BigClassPartl.cs и BigClassPart2.cs.

// BigClassPartl.cs

partial class TheBigClass

{

public void MethodOne()

{

}

}

// BigClassPart2.cs

partial class TheBigClass

{

public void MethodTwo()

{

}

}

Когда компилируется проект, частью которого являются эти два файла, создается еди­ный тип TheBigClass с двумя методами  MethodOne() и MethodTwo().

Если в описании класса используется любое из перечисленных ниже ключевых слов, оно должно быть повторено во всех его частях, находящихся в разных файлах:

  • public

  • private

  • protected

  • internal

  • abstract

  • sealed

  • new

  • общие ограничения

Вложенные части также допускаются, до тех пор, пока ключевое слово partial пред­шествует ключевому слову class во вложенном типе. Атрибуты, XML-комментарии, интер­фейсы, параметры обобщенных типов и члены всех частей частичного класса компилируют­ся в единый тип. Предположим, что есть два исходных файла:

// BigClassPartl.cs

[CustomAttribute]

partial class TheBigClass : TheBigBaseClass, IBigClass

{

public void MethodOne()

{

}

}

// BigClassPart2.cs

[AnotherAttribute]

partial class TheBigClass : IotherBigClass

{

public void MethodTwoO

{

}

}

После компиляции эквивалентный исходный файл получится таким:

[CustomAttribute]

[AnotherAttribute]

partial class TheBigClass:TheBigBaseClass,IBigClass,OtherBigClass

{

public void MethodOne()

{

}

public void MethodTwo()

{

}

}

Соседние файлы в папке 01 Классы