Mega Code Archive

 
Categories / C# / Generics
 

Use an interface constraint

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>();    } }