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

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

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

where Т : имя_интерфейса

где T — это имя параметра типа, а имя_интерфейса — конкретное имя ограничиваемого интерфейса. В этой форме ограничения может быть указан список интерфейсов через запятую. Если ограничение накладывается одновременно на базовый класс и интерфейс, то первым в списке должен быть указан базовый класс.

Ниже приведена программа, демонстрирующая наложение ограничения на интерфейс и представляющая собой переработанный вариант предыдущего примера программы, управляющей списками телефонных номеров. В этом варианте класс PhoneNumber преобразован в интерфейс IPhoneNumber, который реализуется в классах Friend и Supplier.

// Применить ограничение на интерфейс,

using System;

// Специальное исключение, генерируемое в том случае,

// если имя или номер телефона не найдены,

class NotFoundException : Exception {

  /* Реализовать все конструкторы класса Exception. Эти конструкторы выполняют вызов конструктора базового класса. Класс NotFoundException ничем не дополняет класс Exception и поэтому не требует никаких дополнительных действий. */

  public NotFoundException() : base() { }

  public NotFoundException(string str) : base(str) { }

  public NotFoundException(

       string str, Exception inner) : base(str, inner) { }

  protected NotFoundException(

    System.Runtime.Serialization.SerializationInfo si,

    System.Runtime.Serialization.StreamingContext sc) : base(si, sc) { }

}

// Интерфейс, поддерживающий имя и номер телефона,

public interface IPhoneNumber {

  string Number { get; set; }

  string Name { get; set; }

}

// Класс для телефонных номеров друзей.

//В нем реализуется интерфейс IPhoneNumber.

class Friend : IPhoneNumber {

  public Friend(string n, string num, bool wk) {

    Name = n;

    Number = num;

    IsWorkNumber = wk;

  }

  public bool IsWorkNumber { get; private set; }

  // Реализовать интерфейс IPhoneNumber.

  public string Number { get; set; }

  public string Name { get; set; }

  // ...

}

// Класс для телефонных номеров поставщиков,

class Supplier : IPhoneNumber {

public Supplier(string n, string num) {

  Name = n;

  Number = num;

}

// Реализовать интерфейс IPhoneNumber.

public string Number { get; set; }

public string Name { get; set; }

  // ...

}

// В этом классе интерфейс IPhoneNumber не реализуется,

class EmailFriend {

  // ...

}

// Класс PhoneList способен управлять любым видом списка телефонных

// номеров, при условии, что он реализует интерфейс PhoneNumber.

class PhoneList where T : IPhoneNumber {

  T[] phList;

  int end;

  public PhoneList() {

    phList = new T[10];

    end = 0;

  }

  public bool Add(T newEntry) {

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

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

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

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

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

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

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

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

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