查看C#2.0里面 CollectionBase类的元数据文件时,发现两个问题:
1、CollectionBase 继承了接口 IList,却没有实现Add(),Remove()的方法,自己定义一个类继承CollectionBase后不实现这些方法也能编译通过,接口的方法可以不用实现么?
2、属性里面都是{ get; set; }这种形式,自己定义一个像CollectionBase这样的抽象类,使用这种属性形式却编不过,听说3.0里面可以这么用了,那2.0的CollectionBase怎么能这么用呢?
1、CollectionBase 继承了接口 IList,却没有实现Add(),Remove()的方法,自己定义一个类继承CollectionBase后不实现这些方法也能编译通过,接口的方法可以不用实现么?
2、属性里面都是{ get; set; }这种形式,自己定义一个像CollectionBase这样的抽象类,使用这种属性形式却编不过,听说3.0里面可以这么用了,那2.0的CollectionBase怎么能这么用呢?
class CollectionBase
{
IList.Add()
{
}
}
2.属性必须是抽象的:
public abstract string Property
{
get;set;
}
结贴(这都不结贴,你也太不厚道了吧?)
那为什么不实现这个属性,却能正常使用呢?
{ 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我没有实现过,不过却可以用
如果是抽象属性,继承CollectionBase的类都需要实现这个属性吧,
那为什么不实现这个属性,却能正常使用呢? 我到现在都还不知道你说的属性是什么?你都没告诉我属性名2.
这个List我没有实现过,不过却可以用 谁告诉你这个List是抽象的?
protected IList List
{
get
{
return this;
}
}
本身就不是抽象的,当然不用实现
其实应该是
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型的繁请指教了!
再给你说最后一次:
ConllectionBase类并非没有实现,而是使用"显示接口实现",而这种方式实现后,不能用类事例引用去调用,只能通过接口引用去调用。自己去查什么叫“显示接口实现”
2.
VS里面看到的元数据: protected IList List { get; }
其实应该是
protected IList List
{
get
{
return this;
}
} 不存在这样的逻辑关系,看到成员的签名不能得到成员的实现,之所以我知道它的实现,是因为我熟悉类库好了,结贴吧,不要辜负了热心人,还不明白就看书,有新的问题就另贴问