gpt4 book ai didi

C#泛型,设计思想,也许

转载 作者:太空宇宙 更新时间:2023-11-03 19:25:09 28 4
gpt4 key购买 nike

我是 C# 的新手,正在研究它的可能性。

现在我对使用泛型的方式有点困惑...列出泛型的种类。我想在单个父类中创建一个基本的列表功能,只需命名我的子类应包含的类类型。

比如说,我创建了一个类

class ItemList<T> : IList<T> {}

并实现 IList 接口(interface)。 T 在 ItemList 中定义为

public T this[int index] { get; set; }

然后,我想要一个或多个 ItemList 的子类。例如

class ProductList : ItemList<ProductItem> {}

class CategoryList : ItemList<CategoryItem> {}

现在,当我在 ItemList 中实现 IList 接口(interface)时,我希望能够访问诸如 IndexOf、Add、Insert 之类的方法,例如使用标识符 this 或在 ProductList 的实例上

ProductItem product = new ProductItem();
ProductList products = new ProductList();
products.Add(product);

第三行产品。添加错误。

ProductList' does not contain a definition for 'Add' and no extension method 'Add' accepting a first argument of type ProductList could be found (are you missing a using directive or an assembly reference?

我是不是漏掉了一些语法部分,或者这个概念是不可能的?这个想法(目前)只是对以后使用的简化——如果我有一个 ProductList 类,它会包含 ProductItem 是合乎逻辑的,为什么我应该像

ProductList<ProductItem> products = new ProductList<ProductItem>(); 

我希望你明白我的意思。

编辑 - 只是为了清楚这里的对象层次结构......类 ItemList 使用方法 stub 实现 IList 接口(interface)类 ProductList 继承 ItemList 类方法 stub 抛出错误,但它发生在运行时。

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();
}
....
}

最佳答案

哦,这很明显。您实现了接口(interface) explicitly.您可以在调用方法之前将产品转换到 ICollection

(products as ICollection<ProductItem>).Add(product);

或者,更好的是,您可以隐式实现 Add 方法,如下所示:

public void Add(T item) {
fList.Add(item);
}

关于C#泛型,设计思想,也许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9285979/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com