靈感來自this question我曾嘗試在Mono 2.10.9一個下面的代碼和Visual Studio 2010:如何在存在非靜態,更合適的方法時使用動態參數調用靜態方法?
public class Example
{
public static void Main()
{
Foo(1);
}
public static void Foo(dynamic x)
{
Example.Bar(x);
}
static void Bar(dynamic x)
{
x++;
}
int count;
void Bar(int x)
{
count++;
}
}
正如你所看到的,Foo
是靜態的,所以它只能訪問靜態Bar
- 我明確地調用靜態版本!
我知道我將無法聲明static void Bar(int x)
,因爲存在非靜態版本。
但是,將非靜態的參數類型Bar
更改爲,比方說,字符串,使一切正常。
這是爲什麼?這裏有什麼規則?有沒有可能調用靜態方法?
也許這是單反DLR的問題?
編輯:澄清。我想知道什麼規則將一個明確的調用靜態方法(至少我認爲這是明確的)變成一個調用一個非靜態的一個?這顯然不可能從靜態的上下文中。
或者,如果沒有這樣的規則,它可以是錯誤?這種行爲可以以某種方式避免嗎?
請注意:AFAIK,Mono擁有來自MS的Apache授權DLR實施。 –
你問你爲什麼可以在擺脫static void Bar(int x)後添加'void bar(int x)' –
你在這裏問什麼? –