}
// Интерфейс, поддерживающий имя и номер телефона, 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> where T : IPhoneNumber {
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<end; i++) {
// Имя может использоваться, потому что его свойство Name // относится к членам интерфейса IPhoneNumber, на который // накладывается ограничение, if(phList[i].Name == name) return phList[i];
}
// Имя отсутствует в списке, throw new NotFoundException();
}
// Найти и возвратить сведения о телефоне по заданному номеру, public Т FindByNumber(string number) { for(int i=0; i<end; i++) {
// Номер телефона также может использоваться, поскольку его // свойство Number относится к членам интерфейса IPhoneNumber, // на который накладывается ограничение.
