Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Понятие «Запечатанный класс»Содержание книги
Поиск на нашем сайте
Ключевое слово sealed позволяет предотвратить наследование класса или определенных членов класса, помеченных ранее как virtual. Классы могут быть объявлены как запечатанные классы путём помещения ключевого слова sealed перед определением класса. Пример:
public sealed class D { // Члены класса }
Запечатанный класс не может использоваться как базовый класс. Поэтому он также не может быть и абстрактным классом. Запечатанные классы предотвращают наследование. Поскольку их нельзя использовать в качестве базового класса, некоторая оптимизация во время выполнения может немного ускорить вызов членов запечатанных классов. Член класса, метод, поле (переменная), свойство или событие для производного класса, переопределяющего виртуальный член базового класса, может объявлять этот член как запечатанный. Это делает бесполезным виртуальный аспект члена для каждого последующего производного класса. Для этого в объявлении члена класса необходимо перед ключевым словом override поместить ключевое слово sealed. Пример:
public class D: C { public sealed override void DoWork() { } }
Понятие «Разделяемый класс»
В С# имеется возможность разделить определение класса или структуры, интерфейса или метода между двумя или более исходными файлами. Каждый исходный файл содержит определение типа или метода, и все части объединяются при компиляции приложения.
Существует несколько ситуаций, при которых желательно разделение определения класса:
public partial class Employee { public void DoWork() { } }
public partial class Employee { public void GoToLunch() { } }
Ключевое слово partial указывает на то, что другие части класса, структуры или интерфейса могут быть определены в пространстве имён. Все части должны использовать ключевое слово partial. Для формирования окончательного типа все части должны быть доступны во время компиляции. Все части должны иметь одинаковые специальные возможности, например public, private и прочее.
Если какая-либо из частей объявлена абстрактной, то весь тип будет считаться абстрактным. Если какая-либо из частей объявлена запечатанной, то весь тип будет считаться запечатанным. Если какая-либо из частей объявляет базовый тип, то весь тип будет наследовать данный класс. Все части, указывающие базовый класс, должны быть согласованы друг с другом, а части, не использующие базовый класс, всё равно наследуют базовый тип. Части могут указывать различные базовые интерфейсы, и окончательный тип будет реализовывать все интерфейсы, перечисленные во всех разделяемых объявлениях. Любые члены класса, структуры или интерфейса, объявленные в разделяемом объявлении, доступны для всех остальных частей. Окончательный тип представляет собой комбинацию всех частей, выполненную во время компиляции.
В следующем примере показано, что вложенные типы могут быть разделяемыми, даже если тип, в который они вложены, не является разделяемым:
class Container { partial class Nested { void Test() { } }
partial class Nested { void Test2() { } } }
При компиляции атрибуты определений разделяемого типа объединяются. В качестве примера рассмотрим следующие объявления:
[SerializableAttribute] partial class Moon { }
[ObsoleteAttribute] partial class Moon { }
Они эквивалентны следующим объявлениям:
[SerializableAttribute] [ObsoleteAttribute] class Moon { }
Имеется несколько правил, которые необходимо выполнять при работе с определениями разделяемого класса:
public partial class A { } public class A { } // Ошибка, нужно ключевое слово partial
// Разделяй и... partial class ClassWithNestedClass
{ partial class NestedClass { } } //...разделяй! partial class ClassWithNestedClass { partial class NestedClass { } }
Дополнительные о универсальных ограничения разделе Ограничения параметров типа (Руководство по программированию на C#) (http://msdn.microsoft.com/ru-ru/library/d5x73970.aspx).
public partial class CoOrds { private int x; private int y;
public CoOrds(int x, int y) { this.x = x; this.y = y; } }
public partial class CoOrds { public void PrintCoOrds() { Console.WriteLine("CoOrds: {0}, {1}", x, y); }
}
class TestCoOrds { static void Main() { CoOrds myCoOrds = new CoOrds(10, 15); myCoOrds.PrintCoOrds(); // Выведет: CoOrds: 10, 15 Console.WriteLine("Для продолжения нажмите любую клавишу...");; Console.ReadKey(); } }
|
||||||
Последнее изменение этой страницы: 2016-12-28; просмотров: 356; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.23.92.50 (0.01 с.) |