导航
  • 主页
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm
  • WPF
  • 问答

C#2.0实现ICollection和ICollection<T>的问题,高手帮忙~分不够可以再加~!~在线等~

纷享刘晨 2007-03-22 12:18:20
1、想要模拟实现TreeNodeCollection,查看了一下元数据,TreeNodeCollection继承自IList, ICollection, IEnumerable。其中有实现方法
public virtual int Add(TreeNode node);

自己写的类,同样继承自IList, ICollection, IEnumerable,但是在实现public int Add方法时,IDE提示,必须使用public int Add(object item) object当作参数,而无法使用自定义类型,比如UnitNode[例:public int Add(UnitNode item)]。我也看了.net提供的其他的几个实现了IList, ICollection, IEnumerable的类,都是用的是定义的类型,比如TabPageCollection,也继承自IList, ICollection, IEnumerable,但是查看元数据的时候,根本没有实现int Add(object item)。。所以就不明白了。。希望高手指点一下,如何在继承自IList, ICollection, IEnumerable三个接口时候,实现Add方法添加自定义的类型。。

2、在实现ICollection<T>的时候,用什么做数据集呢?ArrayList不支持范型,List<T>缺少IsReadOnly这个属性。。请问在用List<T>的时候,如何得到IsReadOnly这个属性呢?同样的还有IsFixedSize,SyncRoot和IsSynchronized也不知道如何实现。另外,还可以用别的时么代替List<T>么?
...全文
903 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
danjiewu 2007-03-22
UserCollection<T> : IList<T>, IList{
public virtual void Add(T t)
{
//你的代码
}

void IList.Add(object o)
{
Add(o as T);
}
}

不知道是不是你想要的。
回复
1、你理解错误了,TreeNodeCollection add( 非object )不是ilist 的add 的实现,而是一个新的函数。还有 add( string .... ) ,add( treenode ... )等等 。
int add( object val )是通过显式实现ilist接口来实现的

2 、每太明白你的意思 ,list<T> 实现ILIST 因该有isreadonley
回复
纷享刘晨 2007-03-22
谢谢,问题解决了。覆写接口的方法,也可以算作实现的一种阿。。这点还是有点模糊
回复
1、
public interface imy
{
void test();
}
public class my:imy
{
void test()
{
//overload;
}
imy.test()
{
//override ;
}
}
2、
List<yourclas> ylist;
IList list = ylist as IList
???
回复
纷享刘晨 2007-03-22
回hdt(倦怠),list<T>实现的是
第一个问题的回答我不明白的是,当我查看TreeNodeCollection的元数据时,只能看到public int Add(TreeNode node)这个方法,为什么我看不到public int Add(object item)这个方法呢?是用了特殊的修饰符么?但是实现接口的方法是不能用public以外的修饰的阿?

第二个问题的回答:public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable,没有实现IList,所以没有IsReadOnly属性。


不好意思,第二个问题问的不太清楚。我主要想问,如果要实现IList<T>和ICollection<T>,并且避免额外的装箱拆箱,用什么来充当实现IList和ICollection时候用到的ArrayList呢?ArrayList不支持范型,肯定达不到要求。如果使用List<T>,又缺少IsReadOnly等属性,无法满足ICollection<T>的要求。希望能再解释一下,谢谢了。
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.