首页 > 代码库 > 第八章 泛型类
第八章 泛型类
1 概述
1.1 引入泛型的原因
先从一个例子来说明这个问题
class AssembleSample { static void Main() { ContactTable cont = new ContactTable(10); cont[0] = new Business("李明"); Assemble a = cont; a[1] = new ClassMate("张鹏"); IOutput i = cont; i.Output(); } } /// <summary> /// 接口IAccessable /// </summary> public interface IAccessable { int Length { get; } object this[int index] { get; set; } object GetAt(int index); void SetAt(int index, object obj); } /// <summary> /// 抽象类:集合Assemble /// </summary> public abstract class Assemble:IAccessable { //字段 protected object[] m_list; //属性 public int Length { get { return m_list.Length; } } //索引函数 public object this[int index] { get { return m_list[index]; } set { m_list[index] = value; } } //构造函数 public Assemble(int iLength) { m_list = new object[iLength]; } //方法 public object GetAt(int index) { return m_list[index]; } public void SetAt(int index, object obj) { m_list[index] = obj; } } /// <summary> /// 派生类:联系人集合 /// </summary> public class ContactTable:Assemble,IOutput { //覆盖索引函数 public new Contact this[int index] { get { return (Contact)m_list[index]; } set { m_list[index] = value; } } //构造函数 public ContactTable(int iLength) : base(iLength) { } //方法 public new Contact GetAt(int index) { return (Contact)m_list[index]; } public void SetAt(int index, Contact c) { m_list[index] = c; } void IOutput.Output() { foreach (Contact c in m_list) { if (c != null) c.Output(); } } }
程序输出结果:
商务:李明先生/女士办公电话:未知手机:未知商务传真:未知同学:张鹏住宅电话:未知办公电话:未知手机:未知生日:0001-1-1 0:00:00请按任意键继续. . .
上例中的派生类ContactTable是从基类Assemble中继承,但是在它的索引函数以及GetAt方法的定义中,方法成员的返回类型与基类不一致,因此不能算是重载(override)方法,而是覆盖(new)方法。对于基类和派生类的的SetAt方法,由于方法参数不同,它们根本就是两个不同的方法。
第八章 泛型类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。