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>();
}
}
Related examples in the same category