Вход/Регистрация
C# 4.0 полное руководство - 2011
вернуться

Шилдт Герберт

Шрифт:

}

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, // на который накладывается ограничение.

if(phList[i].Number == number) return phList[i];

}

// Номер телефона отсутствует в списке, throw new NotFoundException ;

}

// ...

}

// Продемонстрировать наложение ограничения на интерфейс, class UselnterfaceConstraint { static void Main {

// Следующий код вполне допустим, поскольку //в классе Friend реализуется интерфейс IPhoneNumber. 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;

// Следующий код также допустим, поскольку в классе Supplier // также реализуется интерфейс IPhoneNumber.

PhoneList<Supplier> plist2 = new PhoneList<Supplier>; 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 НЕ реализуется интерфейс IPhoneNumber.

// PhoneList<EmailFriend> plist3 =

  • Читать дальше
  • 1
  • ...
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: