// ...
}
// Класс для телефонных номеров поставщиков, class Supplier : PhoneNumber {
public Supplier(string n, string num) : base(n, num) { }
// ...
}
// Этот класс не наследует от класса PhoneNumber. class EmailFriend {
// ...
}
// Класс PhoneList способен управлять любым видом списка телефонных номеров, // при условии, что он является производным от класса PhoneNumber. class PhoneList<T> where T : PhoneNumber {
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 // относится к членам класса PhoneNumber, который является // базовым по накладываемому ограничению, if(phList[i].Name == name) return phList[i];
}
// Имя отсутствует в списке, throw new NotFoundException() ;
// Найти и возвратить сведения о телефоне по заданному номеру, public Т FindByNumber(string number) { for(int i=0; i<end; i++) {
// Номер' телефона также может использоваться, поскольку // его свойство Number относится к членам класса PhoneNumber, // который является базовым по накладываемому ограничению, if(phList [i].Number == number) return phList[i] ;
}
// Номер телефона отсутствует в списке. • throw new NotFoundException ();
}
// ...
}
// Продемонстрировать наложение ограничений на базовый класс, class UseBaseClassConstraint { static void Main() {
// Следующий код вполне допустим, поскольку // класс Friend наследует от класса PhoneNumber.
PhoneList<Friend> plist = new PhoneList<Friend>(); plist.Add(new Friend('Том', '555- 1234', true)); plist.Add(new Friend('Гари', '555-6756', true)); plist.Add(new Friend('Матт', '555-9254', false));
try {
// Найти номер телефона по заданному имени друга.
Friend frnd = plist.FindByName('Гари') ;
Console.Write(frnd.Name + ': ' + frnd.Number);
if(frnd.IsWorkNumber)
Console.WriteLine(' (рабочий)'); else
Console.WriteLine ();
} catch(NotFoundException) {
Console.WriteLine('He найдено');
}
Console.WriteLine();
