2013-07-11 23 views

回答

4

它看起來好像不是確實需要公開,但使它非靜態在執行時是有問題的。我嘗試用這個代碼開始:

using System; 

class Oddity 
{ 
    public static Oddity operator+(Oddity x, Oddity y) 
    { 
     Console.WriteLine("Adding oddities"); 
     return null; 
    } 
} 

class Test 
{  
    static void Main() 
    { 
     var x = new Oddity(); 
     var y = new Oddity(); 
     var z = x + y; 
    } 
} 

...然後運行它通過ildasm,改變的東西,然後使用ilasm和運行結果。

  • 改變無障礙修飾符assembly(相當於internal):一切正常
  • 改變無障礙修飾符private:它組裝(這讓我吃驚),但是在執行時失敗:

    未處理的異常:System.MethodAccessException:通過方法'Test.Main()'嘗試訪問方法'Oddity.op_Addition(Oddity,Oddity)'失敗。
    在Test.Main()

  • 卸下static部分:它組裝(同樣,令人驚訝的我),但此後未能在執行時:

    未處理的異常:system.missingMethodException而:方法不發現:'奇怪Oddity.op_Addition(奇怪,奇怪)'。
    在Test.Main()

我懷疑這真的應該來在編譯時抓住了,但因爲語言只預計生產商,其是公開的,靜態的,驗證是有點鬆懈。

相關問題