コードをより明確にすることは、言語の決定です。( C# コンパイラがコンパイル時の変数の型に基づいてコードを静的アクセスにコンパイルすることは完全に実行可能でした。) 次のように記述した場合:
obj.StaticMember
メンバーは - に固有のように見えますobj
が、そうではありません。コードは嘘をつくべきではありません。
これがいかに混乱を招く可能性があるかを示す例として、次の有効な Java コードを考えてみましょう (Runnable
変数が という名前であると仮定しますrunnable
)。
Thread thread = new Thread(runnable);
thread.start();
thread.sleep(1000);
それはどのスレッドをスリープ状態にしますか? sleep()
新しいスレッドはもちろん、新しいスレッドを参照する変数を呼び出しています。もちろん、現在実行中のスレッドを常にスリープ状態にするThread.sleep
静的メソッドは除きます。上記のコードからはまったく明らかではありません。幸いなことに、C# では有効ではありません。
これは、C# チームが Java の過ちから学んだように見える領域の 1 つであり、私はとても嬉しく思います。(他の側面については残念ですが、ちょっと...)