码迷,mamicode.com
首页 > 其他好文 > 详细

第八章 泛型类

时间:2014-11-29 14:36:12      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

1 概述

1.1 引入泛型的原因

先从一个例子来说明这个问题

bubuko.com,布布扣
    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();
            }
        }

    }
View Code

程序输出结果:

商务:李明先生/女士
办公电话:未知
手机:未知
商务传真:未知

同学:张鹏
住宅电话:未知
办公电话:未知
手机:未知
生日:0001-1-1 0:00:00

请按任意键继续. . .

上例中的派生类ContactTable是从基类Assemble中继承,但是在它的索引函数以及GetAt方法的定义中,方法成员的返回类型与基类不一致,因此不能算是重载(override)方法,而是覆盖(new)方法。对于基类和派生类的的SetAt方法,由于方法参数不同,它们根本就是两个不同的方法。

第八章 泛型类

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/boywg/p/4130730.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!