// Имя может использоваться, потому что его свойство Name
// относится к членам класса PhoneNumber, который является
// базовым по накладываемому ограничению,
if (phList[i].Name == name) return phList[i];
}
// Имя отсутствует в списке,
throw new NotFoundException();
}
// Найти и возвратить сведения о телефоне по заданному номеру,
public T 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
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();
// Следующий код также допустим, поскольку
// класс Supplier наследует от класса PhoneNumber.
PhoneList
plist2.Add(new Supplier("Фирма Global Hardware", "555-8834"));
plist2.Add(new Supplier("Агентство Computer Warehouse", "555-9256"));
plist2.Add(new Supplier("Компания NetworkCity", "555-2564"));
try {
// Найти наименование поставщика по
//заданному номеру телефона.
Supplier sp = plist2.FindByNumber("555-2564");
Console.WriteLine(sp.Name + ": " + sp.Number);
}
catch (NotFoundException) {
Console.WriteLine("He найдено");
}
// Следующее объявление недопустимо, поскольку
// класс EmailFriend НЕ наследует от класса PhoneNumber.
// PhoneList
// new PhoneList
}
}
Ниже приведен результат выполнения этой программы.
Гари: 555-6756 (рабочий)
Компания NetworkCity: 555-2564
Поэкспериментируйте с этой программой. В частности, попробуйте составить разные виды списков телефонных номеров или воспользоваться свойством IsWorkNumber
в классе PhoneList
. Вы сразу же обнаружите, что компилятор не позволит вам этого сделать, потому что свойство IsWorkNumber
определено в классе Friend
, а не в классе PhoneNumber
, а следовательно, оно неизвестно в классе PhoneList
.