Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Internal class MyBase




Public class MyBase

Public sealed class MyClass

Public abstract class MyClass

{

// члены класса, среди которых могут быть абстрактные

}

В данном случае MyClass является общим абстрактным классом, хотя также возможны и внутренние абстрактные классы. Изолированные классы определяются следующим образом:

{

// члены класса

}

Так же, как абстрактные классы, изолированные классы могут быть общими или внутренними. В определении класса может также задаваться и наследование. Для этого следует после имени класса поместить двоеточие, за которым должно следовать имя базового класса. Например:

public class MyClass: MyBase

{

// члены класса

}

Заметьте, что в определении класса в С# допускается наличие только одного базового класса, и если данный класс наследуется от некоторого абстрактного класса, то в нем должны быть реализованы все наследуемые абстрактные члены (если, конечно, этот класс сам не является абстрактным).

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

{

// члены класса

}

internal class MyClass: MyBase

{

// члены класса

}

А такой код не пройдет компиляцию:

{

// члены класса

}

public class MyClass: MyBase

{

// члены класса

}

Если базовый класс не задан, то класс наследуется только от базового класса System.Object (для которого в С # используется синоним object). System.Object безусловно является корневым в иерархии наследования для всех классов. Мы будем изучать этот фундаментальный класс ниже.

Помимо указания базовых классов, мы можем таким же способом — через двоеточие — указать и поддерживаемые интерфейсы. Если одновременно требуется задавать базовый класс, то он должен располагаться первым после двоеточия, а интерфейсы — за ним. Если базовый класс не задается, то интерфейсы указываются непосредственно за двоеточием. Для отделения имени базового класса (если таковое присутствует) и для отделения одних имен интерфейсов от других следует использовать запятую.

Например, мы можем добавить в класс MyClass интерфейс:

public class MyClass: IMyInterface

{

// члены класса

}

Все члены, являющиеся интерфейсами, должны иметь реализацию в любом классе, поддерживающем данный интерфейс, хотя, конечно, всегда существует возможность реализовать "пустой" интерфейс (без какого бы то ни было функционального кода), если от данного члена не требуется выполнения каких-либо действий.

Следующее объявление неверно, поскольку базовый класс MyBase не является первым вхождением списка наследования:

public class MyClass: IMyInterface, MyBase

{

// члены класса

}

Правильный способ задать и базовый класс, и интерфейс следующий:

public class MyClass: MyBase, IMyInterface

{

// члены класса

}

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

public class MyClass: MyBase, IMyInterface, IMySecondInterface

{

// члены класса

}

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

Модификатор Значение
Отсутствует либо internal Класс доступен только в рамках текущего проекта  
public Класс доступен отовсюду
abstract или internal abstract Класс доступен только в рамках текущего проекта, не допускает создания экземпляров, может только наследоваться
public abstract Класс доступен отовсюду, не допускает создания экземпляров, может только наследоваться
sealed или internal sealed Класс доступен только в рамках текущего проекта, не может наследоваться, допускает только создание экземпляров
public sealed Класс доступен отовсюду, не может наследоваться, допускает только создание экземпляров

 




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 343; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.