C# 面接質問トップ50 & 回答 (2021年版) – 初心者から経験豊富な開発者まで
C# は、.NET フレームワーク上で動作する汎用性の高いオブジェクト指向言語です。ASP.NET Web アプリケーション、デスクトップ ソフトウェア、Unity を用いたゲーム開発など、幅広い分野で採用されています。C# のキャリアを目指すなら、これらの面接質問をマスターすることで、採用担当者に知識の深さと広さをアピールできます。
以下は、初心者向けの基礎からベテラン開発者向けの高度なトピックまで、頻出の C# 面接質問を厳選したリストです。各質問には、業界のベスト プラクティスを反映した簡潔かつ権威ある回答を付けています。
無料 PDF ダウンロード: C# 面接質問集
初心者・2/3/5/10 年経験者向け C# 面接質問
面接官が候補者にマスターを期待する基本概念、構文、よくある落とし穴をカバーしています。
1. C# とは?
C# は静的型付け、タイプセーフ、オブジェクト指向の言語で、.NET ランタイムによって Microsoft Intermediate Language (MSIL) にコンパイルされます。
2. C# のコメントの種類と例を説明してください
• 単一行: // これは単一行コメントです
• 複数行: /* これは複数行コメントです。複数行にわたって記述できます */
• XML ドキュメント: /// <summary>エラーメッセージを設定</summary>
3. 複数の catch ブロックが実行されることはありますか?
いいえ。一致する catch ブロックが実行されると、制御は finally ブロック (存在する場合) に移り、その後 try-catch 構造の後のコードに進みます。
4. public、static、void の違いは?
public – その型を参照するあらゆるコードからアクセス可能。
static – インスタンスではなく型自体に属する。
void – メソッドが値を返さないことを示す。
5. オブジェクトとは?
オブジェクトはクラスのインスタンスで、new キーワードで作成されます。クラスのメンバ (メソッド、プロパティ、フィールド) へのアクセスを提供します。
6. コンストラクタを定義してください
コンストラクタはクラスと同名の特殊なメソッドです。インスタンス作成時に自動的に実行され、フィールドの初期化やセットアップを行います。
7. ジャグ配列とは?
ジャグ配列は配列の配列です。各要素が異なる長さの配列を参照できるため、不規則なデータ構造を表現できます。
8. ref パラメータと out パラメータの違いは?
ref は呼び出し前に変数が初期化済みである必要があります。out は不要で、呼び出し先が戻る前に値を割り当てる必要があります。
9. C# における using ステートメントの用途は?
using ブロックは、IDisposable リソースをブロック終了時に自動的に解放します。例外が発生しても確実に解放されます。
10. シリアライズとは?
シリアライズはオブジェクトをバイト ストリームに変換して保存や送信を行うプロセスです。逆のプロセスがデシリアライズです。型には [Serializable] 属性を付けるか ISerializable を実装する必要があります。
11. this キーワードを static メソッド内で使用できますか?
いいえ。this は現在のインスタンスを参照しますが、static メソッドにはインスタンスがありません。
12. 定数 (const) と読み取り専用フィールド (readonly) の違いは?
定数はコンパイル時の値で変更不可。読み取り専用フィールドは実行時に 1 回だけ割り当て可能 (インラインまたはコンストラクタ内) で、以降変更不可。
3/5/10 年経験者向け C# 上級面接質問
13. インターフェイスとは?例を示してください
インターフェイスは実装を持たないメソッドとプロパティの契約を宣言します。例:
public interface IGreeter { void SetName(string name); string Greet(); } public class FriendlyGreeter : IGreeter { private string _name; public void SetName(string name) => _name = name; public string Greet() => $"Hello, {_name}!"; }
14. 値型と参照型とは?
値型 (例: int, struct) はデータをスタックに直接格納。参照型 (例: class, string) はヒープ上のオブジェクトへの参照を保持。
15. カスタム コントロールとユーザー コントロールの違いは?
カスタム コントロールは DLL にコンパイルされ、フォームへドラッグ&ドロップ可能。ユーザー コントロール (.ascx) は既存コントロールを組み合わせた複合コントロールで、再利用可能な UI コンポーネントに適する。
16. C# の sealed クラスとは?
sealed クラスは継承不可。sealed 修飾子でサブクラス化を防ぎ、クラスの振る舞いを不変に保つ。
17. メソッドのオーバーロードとは?
同じ名前でパラメータ リストが異なる複数のメソッドを定義すること。コンパイラが引数に基づき適切なオーバーロードを選択。
18. Array と ArrayList の違いは?
Array は固定長で要素型が均一。ArrayList (現在は List<T> に置き換わっている) は動的でオブジェクトを格納。
19. private virtual メソッドをオーバーライドできますか?
いいえ。private メソッドは派生クラスから見えないためオーバーライド不可。
20. protected internal アクセシビリティ修飾子を説明してください
protected internal メンバーは、同じアセンブリ内、または他のアセンブリの派生クラスからアクセス可能。
21. System.String と System.Text.StringBuilder の違いは?
String はイミュータブル (変更不可)。変更ごとに新しいインスタンスが生成される。StringBuilder はミュータブルで、効率的な文字列操作向け。
22. Array.CopyTo() と Array.Clone() の違いは?
Clone() は配列全体の浅いコピーを作成。CopyTo() は既存の配列に要素をコピー。
23. 配列を降順でソートするには?
Array.Sort() 後に Array.Reverse() を呼ぶか、カスタム比較子を指定。
24. 例外をキャッチする C# 構文を書いてください
例:
try { GetAllData(); } catch (Exception ex) { // エラー処理 }
25. インターフェイスと抽象クラスの違いは?
インターフェイスはシグニチャのみ宣言し、すべてのメンバーは暗黙的に public かつ abstract。抽象クラスは具体的な実装や private メンバーを持てる。
26. Finalize() と Dispose() の違いは?
Dispose はアンマネージ リソースを確定的に解放。Finalize (デストラクタ) は GC によって呼び出され、非確定的。
27. 循環参照とは?
2 つ以上のオブジェクトが互いを参照し合う状態。ガベージ コレクションを妨げ、メモリ リークの原因となる。
28. C# のジェネリックとは?
ジェネリックは型安全な再利用可能コード (例: List<T>) を可能にし、実行時のキャストを減らしてパフォーマンスを向上。
29. .NET のオブジェクト プールとは?
初期化済みオブジェクトのセットを保持し、再利用することでコストの高い割り当てとガベージ コレクションを最小化。
30. .NET でよく使われる例外型を挙げてください
ArgumentException, ArgumentNullException, ArgumentOutOfRangeException, ArithmeticException, DivideByZeroException, OverflowException, IndexOutOfRangeException, InvalidCastException, InvalidOperationException, IOException, NullReferenceException, OutOfMemoryException, StackOverflowException など。
31. カスタム例外とは?
特定のエラー シナリオに合わせて Exception から派生させたユーザー定義の例外型。
32. デリゲートとは?
デリゲートはタイプセーフな関数ポインタで、コールバックやイベント処理を可能にする。
33. C# でクラスを継承するには?
コロン構文を使用:
public class Derived : Base { }
34. すべての .NET クラスの基底クラスは?
System.Object。
35. メソッドのオーバーライドとオーバーロードの違いは?
オーバーライドは仮想メソッドの実装を派生クラスで変更。オーバーロードは同じ名前で異なるシグニチャの複数メソッドを定義。
36. メソッドをオーバーロードする方法は?
パラメータの型、順序、個数を変える。
37. インターフェイス内のメソッドにアクセシビリティを指定できないのはなぜ?
インターフェイス メンバーは暗黙的に public なので、アクセシビリティ指定は冗長になるため。
38. クラスの継承は許可しつつ、特定のメソッドだけオーバーライド不可にするには?
非 sealed クラス内でそのメソッドを sealed 宣言。
39. 継承したインターフェイスに同名メソッドがある場合は?
派生クラスで 1 回実装し、すべてのインターフェイス契約を満たす。
40. struct と class の違いは?
構造体はスタックに格納される値型、他の構造体から継承不可、慣習的にイミュータブル。クラスはヒープに格納される参照型。
41. .NET で Null 許容型を使うには?
値型に ? を付加:
int? id = null; if (id.HasValue) { /* id.Value を使用 */ }
42. 非デフォルト値で配列を作成するには?
Enumerable.Repeat またはコレクション初期化子を使用。
43. is と as 演算子の違いは?
is は型互換性をチェックしブール値を返す。as はキャストを試み、失敗すれば null を返す。
44. マルチキャスト デリゲートとは?
複数のメソッドを参照するデリゲート。呼び出すと登順にすべてのメソッドが実行される。
45. C# のインデクサーとは?
オブジェクトを配列のようにインデックスアクセス可能にする:
public int this[int index] { get { … } set { … } }
46. throw と throw ex の違いは?
throw は元のスタック トレースを保持。throw ex はスタック トレースをリセットし、デバッグを困難にする。
47. C# の属性とその意義は?
属性は型やメンバーにメタデータを付加し、リフレクションで実行時に取得可能。
48. シングルトン デザイン パターンの実装方法は?
例:
public sealed class Singleton { private static readonly Singleton _instance = new Singleton(); public static Singleton Instance => _instance; private Singleton() { } }
49. DirectCast と CType の違いは?
DirectCast は実行時型がターゲット型と完全一致する必要がある。CType はターゲット型で定義された変換 (変換演算子の呼び出しを含む) を実行。
50. C# はマネージ コードかアンマネージ コードか?
C# はマネージ コード。CLR が MSIL にコンパイルし、メモリ管理を行う。
51. コンソール アプリケーションとは?
コマンド プロンプト ウィンドウで実行されるアプリケーション。.NET 初心者の第一歩としてよく用いられる。
52. Queue から要素を削除する例
Dequeue() で先頭要素を削除:
Queuequeue = new Queue (); queue.Enqueue(1); queue.Enqueue(2); queue.Enqueue(3); int removed = queue.Dequeue(); // removed = 1
C言語
- Robotics & Automation News、2021年アワードセレモニー開催発表─バーチャル開催で年末予定
- サプライチェーンファイナンス2019:トレンド、課題、そして重要な問い
- MEOクラス4 電気口頭試験 完全ガイド:Q&Aと実践指針
- CNCショップ向け無人化製造(ライツアウト・マニュファクチャリング):FAQと導入ガイド
- 2021年トップ5圧縮空気・ガス記事: 主要イノベーションと業界標準
- エンドユーザー体験とパフォーマンスを左右する主要クラウドメトリクス
- 2024年クラウド面接ガイド:エキスパート厳選Q&A
- IIoTシステム・エンジニア/アーキテクト必携のトップ5リソース(2017年版)
- 5Gのトップ5課題:スペクトラム、コスト、カバレッジ、デバイス、セキュリティをどう乗り越えるか
- 5Gとエッジ:2021年に直面する新たなサイバーセキュリティ課題
- 2021年版:Windows/macOS/Linux対応C# IDEトップ10レビュー