using System; class NotFoundException : ApplicationException { } public interface IPhoneNumber { string Number { get; set; } string Name { get; set; } } class Friend : IPhoneNumber { string name; string number; public Friend(string n, string num) { name = n; number = num; } public string Number { get { return number; } set { number = value; } } public string Name { get { return name; } set { name = value; } } } class Supplier : IPhoneNumber { string name; string number; public Supplier(string n, string num) { name = n; number = num; } public string Number { get { return number; } set { number = value; } } public string Name { get { return name; } set { name = value; } } } class EmailFriend { } 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 T findByName(string name) { for(int i=0; i<end; i++) { if(phList[i].Name == name) return phList[i]; } throw new NotFoundException(); } public T findByNumber(string number) { for(int i=0; i<end; i++) { if(phList[i].Number == number) return phList[i]; } throw new NotFoundException(); } } class Test { public static void Main() { PhoneList<Friend> plist = new PhoneList<Friend>(); plist.add(new Friend("A", "555-1111")); plist.add(new Friend("B", "555-6666")); plist.add(new Friend("C", "555-9999")); try { Friend frnd = plist.findByName("B"); Console.Write(frnd.Name + ": " + frnd.Number); } catch(NotFoundException) { Console.WriteLine("Not Found"); } Console.WriteLine(); PhoneList<Supplier> plist2 = new PhoneList<Supplier>(); plist2.add(new Supplier("D", "555-4444")); plist2.add(new Supplier("E", "555-3333")); plist2.add(new Supplier("F", "555-2222")); try { Supplier sp = plist2.findByNumber("555-2222"); Console.WriteLine(sp.Name + ": " + sp.Number); } catch(NotFoundException) { Console.WriteLine("Not Found"); } //PhoneList<EmailFriend> plist3 = new PhoneList<EmailFriend>(); } }