创建自己的集合类

时间:2013-02-24 17:50:38

标签: c# console

我是一名新的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#集合或泛型类。

3 个答案:

答案 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)

假设您确信自己确实想要这样做,那么您应该考虑:

  1. 您将支持哪些类型(您说是通用的,但在您的示例中有一个int数组
  2. 您将如何支持访问和迭代(例如,您是否支持foreach,数组样式[])
  3. 程序员将如何指定长度(你说固定长度,编程是否预先指定,是否有默认值)
  4. 您是否支持查找方法,排序方法等...
  5. 程序员可以将一个集合复制到另一个更大的集合中吗?一个较小的?
  6. 您是否支持FIFO,LIFO,双向迭代等......
  7. 创建一个好的通用集合将很困难,因此我建议您查看您希望集合支持并从那里开始的所有内容。

    所以,是的,你的初步想法仍然不完整。它至少需要一种方法来访问数据并知道有多少数据。

答案 2 :(得分:0)

您可以实现IList<T>接口,它包含构建自己的通用列表类所需的所有签名。 MSDN documentation for IList