Mega Code Archive

 
Categories / C# Tutorial / Generic
 

Use an interface constraint

using System;    class NotFoundException : ApplicationException { }    public interface IUserID {    string Number {      get;      set;    }      string Name {      get;      set;    }  }    class Engineer : IUserID {    string name;    string number;      public Engineer(string n, string num) {      name = n;      number = num;    }      // Implement IUserID    public string Number {      get { return number; }      set { number = value; }    }      public string Name {      get { return name; }      set { name = value; }    }  }    class Manager : IUserID {    string name;    string number;      public Manager(string n, string num) {      name = n;      number = num;    }      // Implement IUserID    public string Number {      get { return number; }      set { number = value; }    }      public string Name {      get { return name; }      set { name = value; }    }  }    class Guest {    }    class IDList<T> where T : IUserID {    T[] idList;    int end;      public IDList() {       idList = new T[10];      end = 0;    }      public bool add(T newEntry) {      if(end == 10)         return false;        idList[end] = newEntry;      end++;        return true;    }      public T findByName(string name) {        for(int i=0; i<end; i++) {        if(idList[i].Name == name)           return idList[i];      }      throw new NotFoundException();    }      public T findByNumber(string number) {      for(int i=0; i<end; i++) {        if(idList[i].Number == number)           return idList[i];      }      throw new NotFoundException();    }  }    class MainClass {    public static void Main() {      IDList<Engineer> plist = new IDList<Engineer>();      plist.add(new Engineer("T", "1"));      plist.add(new Engineer("G", "6"));      plist.add(new Engineer("M", "9"));        try {        Engineer frnd = plist.findByName("G");        Console.Write(frnd.Name + ": " + frnd.Number);      } catch(NotFoundException) {        Console.WriteLine("Not Found");      }        Console.WriteLine();        IDList<Manager> plist2 = new IDList<Manager>();      plist2.add(new Manager("H", "8"));      plist2.add(new Manager("C", "2"));      plist2.add(new Manager("N", "4"));        try {        Manager sp = plist2.findByNumber("4");        Console.WriteLine(sp.Name + ": " + sp.Number);      } catch(NotFoundException) {          Console.WriteLine("Not Found");      }        // The following declaration is invalid      // because Guest does NOT implement IUserID.      // IDList<Guest> plist3 = new IDList<Guest>(); // Error!    }  } G: 6 N: 4