次のコードにはFoo()
、インスタンスメソッドを呼び出す静的メソッドがありますBar()
。
public sealed class Example
{
int count;
public static void Foo( dynamic x )
{
Bar(x);
}
void Bar( dynamic x )
{
count++;
}
}
エラーなしでコンパイルされます*が、実行時にランタイムバインダー例外が生成されます。これらのメソッドへの動的パラメーターを削除すると、期待どおりにコンパイラエラーが発生します。
では、なぜ動的パラメータを使用すると、コードをコンパイルできるのでしょうか。ReSharperもエラーとして表示しません。
編集1: * Visual Studio 2008で
編集2:sealed
サブクラスに静的Bar(...)
メソッドが含まれる可能性があるため、追加されました。シールドされたバージョンでさえ、実行時にインスタンスメソッド以外のメソッドを呼び出すことができない場合にコンパイルされます。
dynamic
本当に必要な場合以外は使用しない理由のもう1つの例です。