2010-06-29 58 views
0

這似乎是不可能使用其默認的構造時,有在類定義的靜態。新()方法來創建對象:創建在IronRuby的.NET對象時定義的靜態。新()方法

.NET類:

public class Tester 
{ 
    public static void New() 
    { 
     Console.WriteLine("In Tester.New()"); 
    } 

    public Tester() 
    { 
     Console.WriteLine("In constructor"); 
    } 
} 

IronRuby的代碼:

Tester.new 
Tester.New 

兩個這些行稱爲Tester.New(),而不是構造函數。看起來不可能調用Tester類的構造函數。

是否有解決方法,或者這是一個錯誤?

回答

1

第一個只是一個不可避免的含糊之處。如果你想讓CLI類看起來像Ruby類,你別無選擇,只能將構造函數映射到new方法。所以,如果你有一個真實new方法和一個映射到構造函數的合成函數,無論你做什麼,合成方法都會影響真實的方法或其他方法。無論哪種方式,你輸了。

這就是爲什麼所有的CLI類有合成clr_new方法:

Tester.clr_new 
# In constructor 
+0

它並沒有真正做一個翻譯在第二種情況下。它按照預期調用靜態New()方法 – 2010-06-30 06:12:17

+0

@Philippe Leybaert:是的,當然。我不知道爲什麼我在那裏感到困惑。如果*做翻譯,它顯然會調用構造函數。 – 2010-06-30 09:11:37