日期:2014-05-17  浏览次数:20876 次

新手关于C#中抽象类CollectionBase的接口实现问题,希望大神解答
本帖最后由 mary__lin 于 2013-03-01 01:08:07 编辑
   最近看C#《入门经典》一书,上面介绍了抽象基类CollectionBase,但是没有说清楚它所继承的接口是如何实现的。
   比如它所继承的接口Ilist,我在VS2010的“对象浏览器”和“元数据”中也找不到该接口方法(比如Add,CopyTo)的实现。在网上看到有人说已经显式实现过了,在msdn上可以看到,http://technet.microsoft.com/zh-cn/subscriptions/system.collections.collectionbase.system.collections.icollection.copyto(v=vs.80).aspx,我找了下,确实在这上面可以看到,但为什么我重新定义一个继承自CollectionBase的类,却又不能直接调用该方法了??


另外注明:
我知道抽象类是不用实现所有接口代码的,但继承自CollectionBase的实类同样没有实现我上述所说的接口方法,同样可以通过编译,所以十分困惑
C# VS2010 新手? msdn 接口

------解决方案--------------------
“元数据”本来就找不到,你可以下载一个叫ILSpy的软件,反编译看源代码。
------解决方案--------------------
如果是"显式实现",那么就显式地用接口来调用。"显式接口实现"的概念见 http://msdn.microsoft.com/zh-cn/library/vstudio/ms173157.aspx

比如:

void Test()
{
   MyCollectionBase my = ...;
   (my as ICollection).CopyTo(...);
}



------解决方案--------------------
纠结这个用处不太大吧
框架中的源码可以用reflector查看