Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1446 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Теги:
Лекция 9:
Наследование в C#
Вот простой пример, когда объявление любого класса абстрактным запрещает его реализацию в объекты
using System; namespace Test { // Хоть нет абстрактных методов // и класс готов к производству объектов, // захотели объявить абстрактным abstract class A { string name = "Класс A"; public virtual void Show() { Console.WriteLine(name); } } // Может производить объекты, // хоть и наследует абстрактный класс class B : A { string name = "Класс B"; public override void Show() { Console.WriteLine(name); } } // Может производить объекты class C { string name = "Класс C"; public void Show() { Console.WriteLine(name); } } // Нет виртуальных функций и ничего не наследует, // все равно можно запретить производить объекты abstract class D { string name = "Класс D"; public void Show() { Console.WriteLine(name); } } // Вызывающая сторона class MyClass { public MyClass() { // Создаем и распечатываем объекты // A a = new A(); a.Show(); // Ошибка компиляции!!! B b = new B(); b.Show(); A b1 = new B(); b1.Show();// Тонкая ссылка - толстый объект C c = new C(); c.Show(); // D d = new D(); d.Show(); // Ошибка компиляции!!! } } // Запуск class Program { static void Main() { // Настройка консоли Console.Title = "Производить объекты абстрактных классов запрещено"; Console.ForegroundColor = ConsoleColor.White; Console.CursorVisible = false; Console.WindowWidth = 60; Console.WindowHeight = 10; new MyClass();// Чтобы сработал конструктор Console.ReadLine(); } } }Листинг 9.19 . Объявление класса абстрактным запрещает его реализацию
Вот результат после закомментирования выделенных строк
Запрещение классу участвовать в наследовании
Иногда разработанный класс может оказаться настолько совершенным и самодостаточным, что не предполагает никаких дальнейших усовершенствований путем новых расширений. В этом случае его можно объявить с модификатором sealed и компилятор будет пресекать все попытки использовать его в качестве базового для дальнейших расширений. При этом будет безразлично, включен ли такой класс в текущий проект в исходном виде, или существует в откомпилированном виде в подключенной к проекту библиотечной сборке.
Вот пример
using System; namespace Test { // Не может иметь наследников sealed class A { } /* Чтобы быстро отменить комментарий, поставьте спереди слеш / // Ошибка компиляции здесь!!! Запрещено наследоваться class B : A { } //*/ // Может наследоваться class C { } // Может наследоваться class D : C { } // Вызывающая сторона class MyClass { public MyClass() { // Просто создаем объекты в управляемой куче A a = new A(); // Создавать объекты можно, // а наследоваться нельзя //B b = new B();// Нет такого класса, он закомментирован C c = new C(); D d = new D(); } } // Запуск class Program { static void Main() { // Настройка консоли Console.Title = "Запрет классу иметь наследников"; Console.ForegroundColor = ConsoleColor.White; Console.CursorVisible = false; Console.WindowWidth = 60; Console.WindowHeight = 10; new MyClass();// Чтобы сработал конструктор Console.ReadLine(); } } }Листинг 9.20 . Запрет классу иметь наследников