[英]Why does C# compiler overload resolution algorithm treat static and instance members with equal signature as equal?
讓我們有兩個成員相同的簽名,但一個是靜態的而另一個是 - 不是:
class Foo
{
public void Test() { Console.WriteLine("instance"); }
public static void Test() { Console.WriteLine("static"); }
}
但是這樣的代碼生成會帶來編譯錯誤:
類型'Foo'已經定義了一個名為'Test'的成員,它具有相同的參數類型
但為什么?
讓我們成功編譯,然后:
Foo.Test()
應輸出“static”
new Foo().Test();
應該輸出“實例”
無法調用靜態成員而不是實例1,因為在這種情況下會出現另一個更合理的編譯器錯誤:
無法使用實例引用訪問成員'Foo.Test()'; 用類型名稱來限定它
從實例方法怎么樣:
Test();
那叫什么? 您可能希望為靜態方法賦予實例方法“優先級”,但兩者都適用。
我會說,即使它被允許,從可讀性的角度來看這是一個根本不好的想法...例如,如果你改變了一個名為Test
的方法,從靜態到實例,它會改變意思是微妙的。
換句話說,我對此被禁止沒有問題:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.