我是一名新的C#开发人员,我现在已经在2个月内编程了。我现在已经找到了一个我想要创建自己的集合类的部分,但是我遇到了一些问题。
我想做什么? - 我想创建一个自己的通用集合类(列表)来存储数据。我的类应该有将项添加到列表末尾或从列表中删除项的方法。
我的班级应该具有列表中项目数量和iist容量的属性。
我必须将列表存储在我的类中的数组中,并且aray必须具有预定义的长度。
所以首先我要创建一个设计并写下我的类应该是什么样子,我只写下我需要的所有东西,比如方法,属性,这就是我到目前为止所做的:
public void Propertie () // depending on how many items I have, I create an propertie for each item
{
}
public void addItems() // method for adding items
{
}
public void removeItems() // method for removing items
{
}
int[] storeList; // array for storing the list
}
所以在我开始真正的编码之前,我只是想知道我是错过了还是做错了什么?
编辑:我不允许在此作业中使用任何c#集合或泛型类。
答案 0 :(得分:1)
我只是想知道我是否错过了或做错了什么?
你在这里展示的设计缺少一些东西。首先,您说您要创建通用列表。你打算如何在一个整数数组中存储通用数据?
此外,您为addItems
提供的签名是
public void addItems()
您为removeItems
提供的签名是
public void removeItems()
如果没有提供任何数据,您的列表对象如何知道要添加的内容?类似地,它如何知道要删除的内容,如果客户端代码没有告诉它(你总是可以删除第一个项目,或者总是删除最后一个项目,但是你在堆栈或队列区域,而不是标准对象)面向列表的API)。
我建议查看System.Collections.Generic.List的API,这是您应该尝试在此处模拟的内置类。您不需要实现List实现的所有属性和方法,但是您应该实现该API的一部分。我会推荐
public sealed class MyList<T>
{
public int Count { get; }
public T this[int index] { get; set; }
public MyList();
public void Add(T item);
public void RemoveAt(int index);
}
作为列表类的最低API。您可以通过声明类型为T[]
的字段作为后备存储以及内部size
字段来实现它。不要忘记,如果客户端代码添加的项目多于后备存储的长度,则必须分配新的后备存储阵列(可能是旧的数据的两倍),将元素复制到新阵列,然后启动将新数组视为后备存储。
您还应该考虑实现System.Collections.Generic.IEnumerable,这不是绝对必要的,但是使集合类更有用。
答案 1 :(得分:0)
假设您确信自己确实想要这样做,那么您应该考虑:
创建一个好的通用集合将很困难,因此我建议您查看您希望集合支持并从那里开始的所有内容。
所以,是的,你的初步想法仍然不完整。它至少需要一种方法来访问数据并知道有多少数据。
答案 2 :(得分:0)
您可以实现IList<T>
接口,它包含构建自己的通用列表类所需的所有签名。 MSDN documentation for IList