ネタ元:お前に訊きたい!
コメントで書いていたのですが、長くなったり、古かったりで記事に切り替えました。
?
C#では静的なメソッドにアクセスするには、クラス名.メソッド名()というように、クラス名を使ってアクセスする必要があります。C++のようにインスタンス変数を使ってアクセスすることはできません。
これはいわゆるバグ対策だと私は解釈しています。
インスタンス変数からスタティックメソッドのアクセスを許可するのは簡単な話だとおもうのですが、そうすると、ソースコードを見ただけでは呼び出しているメソッドがスタティックなのか、そうではないのか判断つかなくなるんです。
クラス(インスタンス)の利用者に「staticメソッドってことを重々承知で使ってます。」って認識させる意味もあります。
通常のメソッドと勘違いして、うっかりstaticメソッド呼び出しをしてしまって、すべてのインスタンスに影響が出てしまったというバグを避けるためではないかと私は解釈しています。
この考え方ってC#の仕様ではあちこちにでてて、たとえば、参照渡しをするときもメソッド利用側で引数にrefつけなきゃいけないとかっていうのも、同様の理由からだと思います。
ifの条件にbool型しか使えないのも、switch caseでフォールスルーがエラーになるのもバグ対策です。
他の言語経験者からすると最初は冗長で面倒くさく感じるかもしれませんが、すべては言語仕様でバグを発生しにくくしているのだと私は解釈しています。
結局コストと時間が一番かかるのがデバッグ・テスト・メンテナンスなので...
あと、シンプルっていうのは、例えばC++にある->や::はすべて.に一本化されたとか、ポインタを排除したとか、多重継承を禁止したとかということです。これらも結局は言語仕様でバグを発生しにくくしようということだと私は解釈しています。
(注)::はなくなったわけではないですけどね。->はマネージドコードでは使えませんね(unsafeなら可)。
宿題忘れてませんよー!
今日中に提出しまーす。
う~、ひとつもぼけれんかった。
Torikobuta にケチョンケチョンに言われる~~~。
さて問題です。
1.私は何回「私は解釈しています。」と書いたでしょう?
2.なぜその台詞を連発したのでしょう?