[英]What is the fully qualified name of a C# method?
在任何類中,如何顯式引用類中的某個方法?
例如,此代碼有效:
class Test : IEnumerable<T> {
public IEnumerator<T> GetEnumerator() { return null; }
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
}
但這不是!
class Test : IEnumerable<T> {
IEnumerator<T> IEnumerable<T>.GetEnumerator() { return null; }
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } // error
}
如何引用方法的通用版本? 在Java中,我只是用接口名稱作為前綴,但這在C#中似乎不起作用。 除了((IEnumerable<T>)this).GetEnumerator()
之外,還有其他方法嗎?
編輯:我對“為什么”它不這樣工作不感興趣。 我只是在尋找一種方法。 謝謝。
如果使用顯式接口實現,則需要通過該接口訪問該方法。
因此,沒有,除了您在課文中提出的建議外,別無其他。
在這種情況下,盡管通常不會對通用接口使用顯式實現。
編輯 :如果文檔警告是您擔心的根源,那么讓我給您一個更好的建議: GhostDoc 。
如果安裝此程序,並將其綁定到Shift + Ctrl + D(默認值),則它將嘗試理解方法的名稱並添加必要的文檔。 這不是很好的部分,因為您應該始終自己編輯該部分,但是如果您從基類或接口(如您的情況)繼承方法和屬性,它將自動復制文檔。 有時您需要對其進行編輯以使其更適合您的類型,但是通常您可以保留它。
它還將對典型模式進行特殊檢測。
試試吧,我確定你會喜歡的。
好吧,你可以...
IEnumerator<T> IEnumerable<T>.GetEnumerator() { return null; } // TODO
IEnumerator IEnumerable.GetEnumerator() {
return ((IEnumerable<T>)this).GetEnumerator();
}
或者您可以同時使用非公共實例方法:
IEnumerator<T> IEnumerable<T>.GetEnumerator() { return GetEnumerator(); }
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
private IEnumerator<T> GetEnumerator() { return null; } // TODO
不過,就我個人而言,我更喜歡看到一個公共的GetEnumerator(),就像我喜歡一個公共的Dispose()一樣,它使消費者更容易知道它的存在。 我不認為所有的接口實現應該是公共的(遠非如此),但foreach
和using
是如此基本,一個小廣告不痛。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.