0

我是一名新的 C# 开发人员,现在我已经编程了 2 个月。我现在已经到了想要创建自己的集合类的部分,但是我遇到了一些问题。

我想做什么?- 我想创建一个自己的通用集合类(列表)来存储数据。我的班级应该有将项目添加到列表末尾或从列表中删除项目的方法。

  • My Class 应该具有列表中项目数和 iist 容量的属性。

  • 我必须将列表存储在班级内的数组中,并且数组必须具有预定义的长度。

所以首先我想创建一个设计并写下我的类应该是什么样子,我只写下我需要的所有东西,比如方法、属性,这就是我到目前为止所做的:

   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# 集合或泛型类。

4

3 回答 3

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,这不是绝对必要的,但会使集合类更加有用。

于 2013-02-24T18:00:03.113 回答
0

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

于 2013-02-24T18:35:50.880 回答
0

假设您已经向自己保证您确实想要这样做,您应该考虑:

  1. 你要支持什么类型(你说通用,但在你的例子中有一个 int 数组
  2. 你将如何支持访问和迭代(例如你会支持foreach,数组样式[])
  3. 程序员将如何指定长度(你说固定长度,编程是否预先指定,是否有默认值)
  4. 你会支持查找方法、排序方法等吗?
  5. 程序员可以将一个集合复制到另一个更大的集合中吗?一个更小的?
  6. 你要支持先进先出、后进先出、双向迭代等...

创建一个好的通用集合会很困难,所以我建议您查看您希望集合支持的所有内容并从那里开始。

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

于 2013-02-24T18:00:04.330 回答