Ниже приведена программа, демонстрирующая наложение ограничения на интерфейс и представляющая собой переработанный вариант предыдущего примера программы, управляющей списками телефонных номеров. В этом варианте классPhoneNumberпреобразован в интерфейсI PhoneNumber,который реализуется в классах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.Serializationlnfo 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
T[] phList; int end;
public PhoneList { phList = new T[10]; end = 0;
}
public bool-Add(T newEntry) { if(end == 10) return false;
phList[end] = newEntry; end++;
return true;
}
// Найти и возвратить сведения о телефоне по заданному имени, public Т FindByName(string name) {
for(int i=0; i
// Имя может использоваться, потому что его свойство Name // относится к членам интерфейса IPhoneNumber, на который // накладывается ограничение, if(phList[i].Name == name) return phList[i];
}