將一個集合描述爲「一組對象」在技術上是正確的,但也有點過於簡化。一個更好的問題將是「什麼是有用的集合?」,其中「有用」會讓你問自己「我該如何使用它」?
現在,A_List中的Array字段絕對是一個集合(但不是「自定義」集合),而您的A_List
(可以說是)集合,但它是一個有用的集合嗎?
一個集合是一組一般相關的爲了在所有這些對象上推廣一些操作而放在一起的對象。你可能想要的方式使用集合很多,但最常見的在許多編程語言中已經非常標準化。例如,爲了使集合「有用」,您通常至少需要能夠從第一個到最後一個僅向前循環中讀取其元素。 您的A_List不直接提供此信息。您可以輕鬆地添加自定義方法來實現此功能,但您可以先行一步並實現現有界面。
如果您在A_List上實現了IEnumerable<T>
,那麼您不僅可以迭代它,還可以在預計IEnumerable
的很多現有代碼中與其他集合交替使用您的A_List。例如:
class A_list : IEnumerable<A>
{
// ... your other code
public IEnumerator<A> GetEnumerator()
{
return ((IEnumerable<A>)list).GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return list.GetEnumerator();
}
}
將允許你這樣做你main
:
foreach(var a in just_an_object)
{
Console.WriteLine(a.Foo);
}
或者你可以使用LINQ使用它:
var numbered=just_an_object.Zip(Enumerable.Range(0,3),(a,b) => b.ToString() + a.Foo);
現在編號是IEnumerable<String>
有三個值(0some,1another,2one),但這不重要;重要的是(通過實現IEnumerable<T>
),just_an_object可以與Linq方法一起使用,該方法與Array或List或大多數其他「標準」集合一起工作。 並且也注意到,無論是foreach
也不Zip
需要知道你的list
字段是Array
而不是List<A>
或red-black tree you implemented yourself,所以你可能要使它private
。
除了遍歷它之外,還有其他的一些東西,你可能想要處理一個集合。添加或刪除元素,提供索引器(以便您可以使用just_an_object[n]
訪問第n個元素)。與IEnumerable一樣,有一些接口可以讓你以「標準化」的方式實現它們(查找ICollection和IList)。
然後有「自定義」方面。那些讓你決定你需要你的自定義集合,而不是直接使用Array或List,已經爲你開箱即用的所有這些東西...
'Both' - 哪兩個? – manojlds
@manojlds問題編輯 –
根據我的定義,數組不是「自定義集合」。但是你的是什麼? – usr