查看C#2.0里面 CollectionBase类的元数据文件时,发现两个问题:
1、CollectionBase 继承了接口 IList,却没有实现Add(),Remove()的方法,自己定义一个类继承CollectionBase后不实现这些方法也能编译通过,接口的方法可以不用实现么?
2、属性里面都是{ get; set; }这种形式,自己定义一个像CollectionBase这样的抽象类,使用这种属性形式却编不过,听说3.0里面可以这么用了,那2.0的CollectionBase怎么能这么用呢?

解决方案 »

  1.   

    1.显示接口实现
    class CollectionBase
    {
       IList.Add()
    {
    }
    }
    2.属性必须是抽象的:
    public abstract string Property
    {
    get;set;
    }
    结贴(这都不结贴,你也太不厚道了吧?)
      

  2.   

    如果是抽象属性,继承CollectionBase的类都需要实现这个属性吧,
    那为什么不实现这个属性,却能正常使用呢? 
      

  3.   

        class Zoo : CollectionBase
        {        public Animal this[int animalIndex]
            {
                get
                {
                    return (Animal)List[animalIndex];
                }
                set
                {
                    List[animalIndex] = value;
                }
            }        public void Add(Animal xiaoA)
            {
                List.Add(xiaoA);
            }        public void Remove(Animal xiaoA)
            {
                List.Remove(xiaoA);
            }        public void RemoveAll()
            {
                List.Clear();
            }
        }这个List我没有实现过,不过却可以用
      

  4.   

    1.
    如果是抽象属性,继承CollectionBase的类都需要实现这个属性吧, 
    那为什么不实现这个属性,却能正常使用呢? 我到现在都还不知道你说的属性是什么?你都没告诉我属性名2.
    这个List我没有实现过,不过却可以用 谁告诉你这个List是抽象的?
    protected IList List
    {
        get
        {
            return this;
        }
    }
     
    本身就不是抽象的,当然不用实现
      

  5.   

    谢谢,问题2,我大概明白了,VS里面看到的元数据: protected IList List { get; }
    其实应该是
    protected IList List
    {
        get
        {
            return this;
        }
    } 问题1、CollectionBase 继承了接口 IList,却没有实现Add(),Remove()的方法,自己定义一个类继承CollectionBase后不实现这些方法也能编译通过,接口的方法可以不用实现么?   仍然一片糊涂根据问题2,又产生了新的问题3
    CollectionBase的元数据里面有这种写法:public int Capacity { get; set; } 如果理解成get{return this;}set{this=value}似乎不对,this不可能是int型的繁请指教了!
      

  6.   

    1.
    再给你说最后一次:
    ConllectionBase类并非没有实现,而是使用"显示接口实现",而这种方式实现后,不能用类事例引用去调用,只能通过接口引用去调用。自己去查什么叫“显示接口实现”
    2.
    VS里面看到的元数据: protected IList List { get; } 
    其实应该是 
    protected IList List 

        get 
        { 
            return this; 
        } 
    } 不存在这样的逻辑关系,看到成员的签名不能得到成员的实现,之所以我知道它的实现,是因为我熟悉类库好了,结贴吧,不要辜负了热心人,还不明白就看书,有新的问题就另贴问