Q.==演算子のオーバーロードを実装してEqualsメソッドと同じ処理を実行するようにしてもよい場合はどのような時か?
A.immutableな場合。
Q.ループ内でなければ、たとえ100個の文字列型変数であってもまとめて+演算子で連結してよい理由を説明せよ。
A.ビルド時に最適化されるから。
Q.List<int>のように値型を格納するジェネリックコレクションを使ってもボックス化/ボックス化解除が発生しない理由を説明せよ。
A.C++と同じ。 List<int>とList<long>は厳密には別の型。
Q.Full GC(Gen2 GC)が動作したときに断片化していてもコンパクションされないヒープ領域はどのような領域か?
A.ネイティブヒープ
Q.throw; とthrow ex; の違いをスタックトレースの観点で説明せよ。
A.スタックトレースを引き付くか、引き継がないか。
Q.フィールドのアクセス修飾子をprivateにしプロパティのgetter/setterではそのフィールドを読み書きするだけというコードが馬鹿馬鹿しい理由を説明せよ。
A.リフレクションを使う場合に於いて、フィールドとプロパティは明確に分かれるし、なんかあったっけ?。
Q.nullを参照している参照型変数のメソッドを呼び出そうとした場合でもNullReferenceExceptionが発生しないのは主にどういう状況か?
A.クラス・メソッドを呼び出す状況。
Q.クラスと構造体の違いは何か?(「スタックとヒープ」以外で)
A.C言語の構造体との互換性の有無とかだっけ?
構造体は値型 (11.3.1 を参照) です。
すべての構造体型は暗黙的に System.ValueType クラスから継承します (11.3.2 を参照)。
構造体型の変数への代入では、代入対象の値の "コピー" が作成されます (11.3.3 を参照)。
構造体の既定値は、すべての値型フィールドをそれぞれの既定値に、すべての参照型フィールドを null に設定することで生成される値です (11.3.4 を参照)。
構造体の型と object との変換には、ボックス化演算およびボックス化解除演算を使用します (11.3.5 を参照)。
this の意味が構造体では異なります (11.3.6 を参照)。
構造体のインスタンス フィールドの宣言には、変数初期化子を含めることはできません (11.3.7 を参照)。
構造体では、パラメータなしのインスタンス コンストラクタを宣言できません (11.3.8 を参照)。
構造体ではデストラクタを宣言できません (11.3.9 を参照)。
Q.デストラクタとは何か?
A.これは、.Net FrameworkやJavaに置けるファイナライザのことかな?
GCを使う言語であるC#では、C++と違ってメモリをユーザが直接開放する手段が言語の構文としては、存在しない。
元々は、これがデストラクタなのだけど。。。
delete hoge;って書いたら呼び出されるメソッド。
Q.インターフェースの明示的実装を利用する目的を1つ説明せよ。
A.インターフェイスを介してのみメンバを呼び出す場合??
うーん、意外と理解してない。
デストラクタって言われるとC++が思い起こされちゃうし、ただ、言語仕様というより、ルール的な設問が多いように感じる。
最終更新:2017年05月14日 21:21