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

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

<b>    IsWorkNumber = wk;</b>

<b>  }</b>

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

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

<b>}</b>

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

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

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

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

<b>}</b>

<b>// Этот класс не наследует от класса PhoneNumber.</b>

<b>class EmailFriend {</b>

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

<b>}</b>

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

<b>// при условии, что он является производным от класса PhoneNumber.</b>

<b>class PhoneList&lt;T&gt; where T : PhoneNumber {</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>  // Добавить элемент в список,</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>      // относится к членам класса PhoneNumber, который является</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>      // Номер&quot; телефона также может использоваться, поскольку</b>

<b>      // его свойство Number относится к членам класса PhoneNumber,</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 UseBaseClassConstraint {</b>

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

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

<b>    // класс Friend наследует от класса PhoneNumber.</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>

<b>        Console.WriteLine(&quot; (рабочий)&quot;);</b>

<b>      else</b>

<b>        Console.WriteLine();</b>

<b>    }</b>

<b>    catch (NotFoundException) {</b>

<b>      Console.WriteLine(&quot;He найдено&quot;);</b>

<b>    }</b>

<b>    Console.WriteLine();</b>