Добавить в цитаты Настройки чтения

Страница 281 из 502

<b>    IsWorkNumber = wk;</b>

<b>  }</b>

<b>  public bool IsWorkNumber { get; private set; }</b>

<b>  // Реализовать интерфейс IPhoneNumber.</b>

<b>  public string Number { get; set; }</b>

<b>  public string Name { get; set; }</b>

<b>  // ...</b>

<b>}</b>

<b>// Класс для телефонных номеров поставщиков,</b>

<b>class Supplier : IPhoneNumber {</b>

<b>public Supplier(string n, string num) {</b>

<b>  Name = n;</b>

<b>  Number = num;</b>

<b>}</b>

<b>// Реализовать интерфейс IPhoneNumber.</b>

<b>public string Number { get; set; }</b>

<b>public string Name { get; set; }</b>

<b>  // ...</b>

<b>}</b>

<b>// В этом классе интерфейс IPhoneNumber не реализуется,</b>

<b>class EmailFriend {</b>

<b>  // ...</b>

<b>}</b>

<b>// Класс PhoneList способен управлять любым видом списка телефонных</b>

<b>// номеров, при условии, что он реализует интерфейс PhoneNumber.</b>

<b>class PhoneList&lt;T&gt; where T : IPhoneNumber {</b>

<b>  T[] phList;</b>

<b>  int end;</b>

<b>  public PhoneList() {</b>

<b>    phList = new T[10];</b>

<b>    end = 0;</b>

<b>  }</b>

<b>  public bool Add(T newEntry) {</b>

<b>    if (end == 10) return false;</b>

<b>    phList[end] = newEntry;</b>

<b>    end++;</b>

<b>    return true;</b>

<b>  }</b>

<b>  // Найти и возвратить сведения о телефоне по заданному имени,</b>

<b>  public T FindByName(string name) {</b>

<b>    for (int i = 0; i &lt; end; i++) {</b>

<b>      // Имя может использоваться, потому что его свойство Name</b>

<b>      // относится к членам интерфейса IPhoneNumber, на который</b>

<b>      // накладывается ограничение,</b>

<b>      if (phList[i].Name == name) return phList[i];</b>

<b>    }</b>

<b>    // Имя отсутствует в списке,</b>

<b>    throw new NotFoundException();</b>

<b>  }</b>

<b>  // Найти и возвратить сведения о телефоне по заданному номеру,</b>

<b>  public T FindByNumber(string number) {</b>

<b>    for (int i = 0; i &lt; end; i++) {</b>

<b>      // Номер телефона также может использоваться, поскольку его</b>

<b>      // свойство Number относится к членам интерфейса IPhoneNumber,</b>

<b>      // на который накладывается ограничение.</b>

<b>      if (phList[i].Number == number) return phList[i];</b>

<b>    }</b>

<b>    // Номер телефона отсутствует в списке,</b>

<b>    throw new NotFoundException();</b>

<b>  }</b>

<b>  // ...</b>

<b>}</b>

<b>// Продемонстрировать наложение ограничения на интерфейс,</b>

<b>class UselnterfaceConstraint {</b>

<b>  static void Main() {</b>

<b>    // Следующий код вполне допустим, поскольку</b>

<b>    //в классе Friend реализуется интерфейс IPhoneNumber.</b>

<b>    PhoneList&lt;Friend&gt; plist = new PhoneList&lt;Friend&gt;();</b>

<b>    plist.Add(new Friend(&quot;Том&quot;, &quot;555-1234&quot;, true));</b>

<b>    plist.Add(new Friend(&quot;Гари&quot;, &quot;555-6756&quot;, true));</b>

<b>    plist.Add(new Friend(&quot;Матт&quot;, &quot;555-9254&quot;, false));</b>

<b>    try {</b>

<b>      // Найти номер телефона по заданному имени друга.</b>

<b>      Friend frnd = plist.FindByName(&quot;Гари&quot;);</b>

<b>      Console.Write(frnd.Name + &quot;: &quot; + frnd.Number);</b>

<b>      if (frnd.IsWorkNumber)</b>