Читаем C# 4.0: полное руководство полностью

// Создать объект класса Gen2.

class GenHierDemo2 {

  static void Main() {

    // Создать объект класса Gen2 с параметрами

    // типа string и int.

    Gen2 < string, int > x =

             new Gen2("Значение равно: ", 99);

    Console.Write(x.GetOb());

    Console.WriteLine(x.GetObj2());

  }

}

Обратите внимание на приведенное ниже объявление класса Gen2 в данном варианте иерархии классов.

class Gen2 : Gen {

В этом объявлении Т — это тип, передаваемый базовому классу Gen; а V — тип, характерный только для производного класса Gen2. Он служит для объявления объекта оb2 и в качестве типа, возвращаемого методом GetObj2(). В методе Main() создается объект класса Gen2 с параметром Т типа string и параметром V типа int. Поэтому код из приведенного выше примера дает следующий результат.

Значение равно: 99

Обобщенный производный класс

Необобщенный класс может быть вполне.законно базовым для обобщенного производного класса. В качестве примера рассмотрим следующую программу.

// Пример необобщенного класса в качестве базового для

// обобщенного производного класса.

using System;

// Необобщенный базовый класс,

class NonGen {

  int num;

  public NonGen(int i) {

    num = i;

  }

  public int GetNum() {

    return num;

  }

}

// Обобщенный производный класс,

class Gen : NonGen {

  T ob;

  public Gen(T o, int i) : base(i) {

    ob = o;

  }

  // Возвратить значение переменной ob.

  public T GetOb() {

    return ob;

  }

}

// Создать объект класса Gen.

class HierDemo3 {

  static void Main() {

    // Создать объект класса Gen с параметром типа string.

    Gen w = new Gen("Привет", 47);

    Console.Write(w.GetOb() + " ");

    Console.WriteLine(w.GetNum());

  }

}

Эта программа дает следующий результат.

Привет 47

В данной программе обратите внимание на то, как класс Gen наследует от класса NonGen в следующем объявлении.

class Gen : NonGen {

Класс NonGen не является обобщенным, и поэтому аргумент типа для него не указывается. Это означает, что параметр Т, указываемый в объявлении обобщенного производного класса Gen, не требуется для указания базового класса NonGen и даже не может в нем использоваться. Следовательно, класс Gen наследует от класса NonGen обычным образом, т.е. без выполнения каких-то особых условий.

<p>Переопределение виртуальных методов в обобщенном классе</p>

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

// Пример переопределения виртуального метода в обобщенном классе,

using System;

// Обобщенный базовый класс,

class Gen {

  protected T ob;

  public Gen(T о) {

    ob = о;

  }

  // Возвратить значение переменной ob.

  // Этот метод является виртуальным.

  public virtual T GetOb() {

    Console.Write("Метод GetOb() из класса Gen" + " возвращает результат: ");

    return ob;

  }

}

// Класс, производный от класса Gen. В этом классе

// переопределяется метод GetOb().

class Gen2 : Gen {

  public Gen2(T o) : base(o) { }

  // Переопределить метод GetOb().

  public override T GetOb() {

    Console.Write("Метод GetOb() из класса Gen2" + " возвращает результат: ");

    return ob;

  }

}

// Продемонстрировать переопределение метода в обобщенном классе,

class OverrideDemo {

  static void Main() {

    // Создать объект класса Gen с параметром типа int.

    Gen iOb = new Gen(88);

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных