かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

「C#できます」と言い放ったあいつがJavaプログラマであることを見分ける10の質問に答えてみた

何も見ずにやったのでボロボロです…orz
はたして何問あってればJavaプログラマと認定されずにC#プログラマと認定してもらえるのだろうか・・・

もとネタを知らない人は、以下のサイトを先に見てねっ。絶対だよっ。

以下私の回答用紙

==演算子のオーバーロードを実装してEqualsメソッドと同じ処理を実行するようにしてもよい場合はどのような時か?

う・・・自身ないっす・・・。
不変なクラスの時???

ループ内でなければ、たとえ100個の文字列型変数であってもまとめて+演算子で連結してよい理由を説明せよ。

コンパイラたんは賢いので自動で効率の良い感じにしてくれるのですよ(キリッ

List<int>のように値型を格納するジェネリックコレクションを使ってもボックス化/ボックス化解除が発生しない理由を説明せよ。

えっ・・・発生すると思ってたorz

Full GC(Gen2 GC)が動作したときに断片化していてもコンパクションされないヒープ領域はどのような領域か?

?????

throw; とthrow ex; の違いをスタックトレースの観点で説明せよ。

throw exはスタックトレースを切り捨てる。throwは、元の例外のスタックトレースを切り捨てない。

フィールドのアクセス修飾子をprivateにしプロパティのgetter/setterではそのフィールドを読み書きするだけというコードが馬鹿馬鹿しい理由を説明せよ。

自動実装プロパティがあるから、全部手書きなんてナンセンス。

nullを参照している参照型変数のメソッドを呼び出そうとした場合でもNullReferenceExceptionが発生しないのは主にどういう状況か?

えっ・・・。拡張メソッドで内部でnullチェックをしてるとかいう普通はしないような状況くらいしか思いつかない・・・。

クラスと構造体の違いは何か?(「スタックとヒープ」以外で)

参照型と値型かな。代入したときに参照が渡されるのがクラスで、コピーが渡されるのが構造体だと思う。

デストラクタとは何か?

GCで回収されるときに呼ばれる最後の砦の処理を書くところ。

インターフェースの明示的実装を利用する目的を1つ説明せよ。

タイプセーフでないインターフェースをタイプセーフなように見せるため。(昔のジェネリックが導入されるまえのコレクションの実装とかでよくやってたやつ)