この質問に触発されて、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
、たとえば文字列に変更すると、すべてがうまくいきます。
何故ですか?ここでのルールは何ですか?静的メソッドを呼び出すことは可能ですか?
多分それはMono DLRの問題ですか?
編集:明確にするために。静的メソッドへの明示的な呼び出し(少なくとも明示的だと思います) を非静的メソッドへの呼び出しに変えるルールを知りたいですか? これは、静的コンテキストからは明らかに不可能です。
または、そのようなルールがない場合、それはバグでしょうか? この動作は何とか回避できますか?