我經常需要在代碼中實現一些接口,如IEnumerable<T>
。如何實現需要重複成員名稱的接口?
每一次,自動執行的時候,我遇到以下:
public IEnumerator<T> GetEnumerator() {
// Code here...
}
public IEnumerator GetEnumerator1() {
// Code here...
}
雖然我必須實現兩個GetEnumerator()方法,他們不可能可以具有相同的名稱,即使我們明白,他們這樣做,不知何故。編譯器不能將它們視爲另一個的重載,因爲只有返回類型不同。
在這樣做時,我管理的GetEnumerator1()
訪問設置爲private
。這樣,編譯器不會抱怨沒有實現接口成員,我只是在方法的主體內拋出一個NotImplementedException
。
不過,我不知道它是否是一個很好的做法,或者如果我將着手有所不同,作爲可能的方法別名或像這樣的東西。
什麼是最好的方法,而實現一個接口,如
IEnumerable<T>
需要實現兩個不同的方法具有相同的名稱?
編輯#1
是否VB.NET,同時實現接口,因爲在VB.NET它明確地實現,從而迫使
GetEnumerator1()
不同於C#反應。下面的代碼:
Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of T) Implements System.Collections.Generic.IEnumerable(Of T).GetEnumerator
// Code here...
End Function
Public Function GetEnumerator1() As System.Collections.Generic.IEnumerator Implements System.Collections.Generic.IEnumerable.GetEnumerator
// Code here...
End Function
兩個GetEnumerator()
方法都明確地實施,編譯將拒絕他們具有相同的名稱。爲什麼?
這將不會編譯。 – SLaks 2010-06-01 19:40:08
嗯,這裏並不重要,因爲它是陳述我想說的話的一個例子。請參閱我的問題編輯。 =) – 2010-06-01 19:53:00
你的VB方法聲明顯式地實現*不同*接口(泛型和非IEnumerator的泛型版本):你是否說編譯器不允許這些? – 2010-06-01 19:58:12