2013-02-24 146 views
0

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

+1

這裏您的目標是什麼?爲什麼你認爲創建自己的收藏課是必需的? – Adil 2013-02-24 17:55:19

回答

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,這不是嚴格必要的,但使集合類更有用。

0

假設你放心你自己,你真的想這樣做,你應該考慮:

  1. 什麼類型的,你要支持(你說一般,但在你的例子
  2. int數組
  3. 你將如何支持訪問和迭代(例如,你會支持foreach,數組樣式[])
  4. 程序員將如何指定長度(你說的是固定長度,程序是否指定了前端,是否存在默認)
  5. 你會支持find方法嗎,排序方法等...
  6. 程序員可以將一個集合複製到另一個更大的集合中嗎?一個較小的?
  7. 你要支持先進先出,後進先出,雙向迭代,等等...

創造良好的泛型集合將是困難的,所以我建議你看的一切,你想收集支持並從那裏出發。

所以,你的初始想法仍然不完整。至少需要一種方法來訪問數據並知道有多少數據。