簡體   English   中英

C#方法的全限定名是什么?

[英]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()一樣,它使消費者更容易知道它的存在。 我不認為所有的接口實現應該是公共的(遠非如此),但foreachusing是如此基本,一個小廣告不痛。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM