当前位置: 代码迷 >> C# >> 属性也可以有方法么?解决方法
  详细解决方案

属性也可以有方法么?解决方法

热度:278   发布时间:2016-04-28 08:35:41.0
属性也可以有方法么?
本帖最后由 phimiler 于 2015-11-08 23:08:02 编辑

public abstract class Animal:CollectionBase
    {
        public void Add(Animal newAnimal)
        {
            List.Add(newAnimal);
        }
   }


以上代码中,教程中说List是CollectionBase的一个受保护属性,类型为Ilist
既然是属性,为什么后面可以跟点号再加方法名呢?
另外,Add()方法是接口Ilist提供的,那么实现该方法的CollectionBase为什么没有实现它(看了CollectionBase的元数据,没有找到实现方法),是不是因为CollectionBase是抽象类,那其派生的类Animals也没有实现该方法,因为我在Ilist的元数据中看了Add()方法的返回类型是int,上面代码中也没有实现该方法的代码啊。
类,派生类,接口,实现,真的是很搞啊,哪位大神可以指点一下。
------解决思路----------------------
引用:
Quote: 引用:

属性可以是任意类型也是一个对象 既然是对象 为什么不能有方法?

public class A{
    public void Foo(){....}
}

public class B{
    public A XXX {get;set;}
}

难道就不能 new B().XXX.Foo() 了吗?


这位仁兄,你的说法我理解了。List是接口Ilist类型,这个接口里确实也有Add()的方法,写为int Add(object value); 但不知支持此接口的CollectionBase抽象类里为什么没有实现这个方法,不是说支持接口的类必须要实现接口的方法么?请说明下,谢谢。

CollectionBase有实现了所有接口的方法。只不过这些方法都private类型的,所以你按f12看不到。f12你可以看到public或protected类型的,因为它们需要被外部或子类访问;而内部的private方法根本不需要公开,因为不需要使用到。
这个时候你应该去看源代码。
  相关解决方案