// Имя отсутствует в списке, throw new NotFoundException;
}
// Найти и возвратить сведения о телефоне по заданному номеру, public Т FindByNumber(string number) { for(int i=0; i
// Номер телефона также может использоваться, поскольку его // свойство Number относится к членам интерфейса IPhoneNumber, // на который накладывается ограничение.
if(phList[i].Number == number) return phList[i];
}
// Номер телефона отсутствует в списке, throw new NotFoundException ;
}
// ...
}
// Продемонстрировать наложение ограничения на интерфейс, class UselnterfaceConstraint { static void Main {
// Следующий код вполне допустим, поскольку //в классе Friend реализуется интерфейс IPhoneNumber. PhoneList
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;
// Следующий код также допустим, поскольку в классе Supplier // также реализуется интерфейс IPhoneNumber.
PhoneList
try {
// Найти наименование поставщика по заданному номеру телефона. Supplier sp = plist2.FindByNumber("555-2564");
Console.WriteLine(sp.Name + ": " + sp.Number);
} catch(NotFoundException) {
Console.WriteLine("He найдено");
}
// в классе EmailFriend НЕ реализуется интерфейс IPhoneNumber.
// PhoneList
// new PhoneList
}
}
В этой версии программы ограничение на интерфейс, указываемое в классеPhoneList,требует, чтобы аргумент типа реализовал интерфейсIPhoneList.А поскольку этот интерфейс реализуется в обоих классах,FriendиSupplier,то они относятся к допустимым типам, привязываемым к типуТ.В то же время интерфейс не реализуется в классеEmailFriend,и поэтому этот класс не может быть привязан к типуТ.Для того чтобы убедиться в этом, удалите символы комментария в двух последних строках кода в методеMain . Вы сразу же обнаружите, что программа не компилируется.
Применение ограничения new на конструктор