【发布时间】:2012-02-15 12:12:30
【问题描述】:
我是 C# 的新手,我正在研究它的可能性。
现在我有点困惑,我想使用泛型...列出泛型类型。我想在单个父类中创建一个基本的列表功能,并命名我的子类应该包含的类类型。
说,我创建了一个类
class ItemList<T> : IList<T> {}
并实现 IList 接口。 T 在 ItemList 中定义为
public T this[int index] { get; set; }
然后,我想拥有一个或多个 ItemList 的子类。例如
class ProductList : ItemList<ProductItem> {}
class CategoryList : ItemList<CategoryItem> {}
现在,当我在 ItemList 中实现 IList 接口时,我希望能够使用标识符 this 或 ProductList 实例访问 IndexOf、Add、Insert 等方法
ProductItem product = new ProductItem();
ProductList products = new ProductList();
products.Add(product);
3rd line products.Add is error.
ProductList' 不包含“添加”的定义,并且 没有扩展方法“添加”接受类型的第一个参数 可以找到 ProductList(您是否缺少使用 指令还是程序集引用?
我是否遗漏了一些语法部分或者这个概念是不可能的?这个想法(现在)只是为了简化以后的使用——如果我有一个 ProductList 类,它会包含 ProductItem 是合乎逻辑的,我为什么要像
一样使用它ProductList<ProductItem> products = new ProductList<ProductItem>();
希望你明白我的意思。
编辑 - 只是为了清楚这里的对象层次结构...... 类 ItemList 使用方法存根实现 IList 接口 类 ProductList 继承 ItemList 类 方法存根抛出错误,但它发生在运行时。
ItemList 的详细信息
class ItemList<T> : IList<T>
{
public T this[int index] { get; set; }
private List<T> fList = new List<T>();
int IList<T>.IndexOf(T item)
{
return fList.IndexOf(item);
}
void ICollection<T>.Add(T item)
{
fList.Add(item);
}
void IList<T>.Insert(int index, T item)
{
fList.Insert(index, item);
}
void IList<T>.RemoveAt(int index)
{
throw new NotImplementedException();
}
....
}
【问题讨论】:
-
乍一看还不错,那么错误是什么意思 - 编译/运行时?
-
您实现
IList<T>是因为您想了解泛型集合的工作原理,还是有其他原因避免直接从List<T>继承此功能? -
不知道是不是NotImplementedException?
-
很抱歉,我以为人们会把它放在他们的小指头上,现在一切对我来说都是基础。它是一个编译时错误。我会更新问题。
-
ItemList如何实现Add?向我们展示代码。我猜你正在使用显式实现,它不会在没有类型转换的情况下使 Add 可见。