System.Runtime.Serialization.Serializationlnfо si,

System.Runtime.Serialization.StreamingContext sc) : base (si, sc) { }

}

// Базовый класс, в котором хранятся имя абонента и номер его телефона, class PhoneNumber {

public PhoneNumber(string n, string num) {

Name = n;

Number = num;

}

public string Number { get; set; } public string Name { get; set; }

}

// Класс для телефонных номеров друзей, class Friend : PhoneNumber {

public Friend(string n, string num, bool wk) : base(n, num)

IsWorkNumber = wk;

}

public bool IsWorkNumber { get; private set; }

// ...

}

// Класс для телефонных номеров поставщиков, class Supplier : PhoneNumber {

public Supplier(string n, string num) : base(n, num) { }

// ...

}

// Этот класс не наследует от класса PhoneNumber. class EmailFriend {

// ...

}

// Класс PhoneList способен управлять любым видом списка телефонных номеров, // при условии, что он является производным от класса PhoneNumber. class PhoneList where T : PhoneNumber {

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

// Имя может использоваться, потому что его свойство Name // относится к членам класса PhoneNumber, который является // базовым по накладываемому ограничению, if(phList[i].Name == name) return phList[i];

}

// Имя отсутствует в списке, throw new NotFoundException() ;

// Найти и возвратить сведения о телефоне по заданному номеру, public Т FindByNumber(string number) { for(int i=0; i

// Номер" телефона также может использоваться, поскольку // его свойство Number относится к членам класса PhoneNumber, // который является базовым по накладываемому ограничению, if(phList[i].Number == number) return phList[i] ;

}

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

}

// ...

}

// Продемонстрировать наложение ограничений на базовый класс, class UseBaseClassConstraint { static void Main() {

// Следующий код вполне допустим, поскольку // класс Friend наследует от класса PhoneNumber.

PhoneList plist = new 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)

Перейти на страницу:

Похожие книги