●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

型を柔軟に扱う「ジェネリクス(Generics)」とは?

C#の ジェネリクス(Generics) は、クラス・メソッド・インターフェースにおいて、データの型を後から指定できる仕組みです。
汎用的かつ型安全なコードを記述できるため、コレクション操作などで非常に便利です。

基本構文

class クラス名<T> {
    public T Value;
}
    

例:ジェネリッククラス

public class Box<T> {
    public T Content;

    public void Show() {
        Console.WriteLine("中身: " + Content);
    }
}
    
Box<string> strBox = new Box<string>();
strBox.Content = "Hello";
strBox.Show();  // → 中身: Hello

Box<int> intBox = new Box<int>();
intBox.Content = 123;
intBox.Show();  // → 中身: 123
    

ジェネリックメソッド

public class Util {
    public static void Swap<T>(ref T a, ref T b) {
        T temp = a;
        a = b;
        b = temp;
    }
}
    
int x = 1, y = 2;
Util.Swap(ref x, ref y);
Console.WriteLine(x);  // → 2
Console.WriteLine(y);  // → 1
    

標準ライブラリでの使用例

  • List<T>:汎用リスト
  • Dictionary<TKey, TValue>:キーと値のペア
  • Queue<T> / Stack<T>:データ構造
List<string> names = new List<string>();
names.Add("太郎");
names.Add("花子");

foreach (var name in names) {
    Console.WriteLine(name);
}
    

型制約(where句)

ジェネリックに制限を加えたい場合は、whereを使って条件を指定できます。

public class Manager<T> where T : new() {
    public T Create() {
        return new T();  // Tは引数なしのコンストラクタを持つ必要あり
    }
}
    

ジェネリクスのメリット

  • 型安全性が高い(キャスト不要)
  • コードの再利用性が高い
  • パフォーマンス向上(ボクシング/アンボクシングが不要)

まとめ

ジェネリクス(Generics)は、クラスやメソッドで扱うデータの型を柔軟に指定できる仕組みです。
型安全性を保ちながら再利用性の高いコードを実現できるため、List<T>Dictionary<TKey, TValue>など、多くの標準機能でも使われています。
「型をあとで決めたい」=ジェネリクスの出番!と覚えましょう。

 

C#関連用語集

−−−−−  C#  −−−−−

C#の基本単位「クラス(Class)」とは?

クラスから生まれる実体「オブジェクト(Object)」とは?

クラスの実体「インスタンス(Instance)」とは?

オブジェクトの初期化に使う「コンストラクタ(Constructor)」とは?

フィールドへのアクセスを制御!「プロパティ(Property)」とは?

クラスが持つデータ「フィールド(Field)」とは?

クラスの動作を定義する「メソッド(Method)」とは?

既存のクラスを引き継ぐ「継承(Inheritance)」とは?

同じ命令で異なる動きができる「多態性(Polymorphism)」とは?

データを守る「カプセル化(Encapsulation)」とは?

土台だけを用意する「抽象クラス(Abstract Class)」とは?

ルールを定める仕組み「インターフェース(Interface)」とは?

親クラスのメソッドを上書きする「オーバーライド(Override)」とは?

引数の違いで同じ名前が使える「オーバーロード(Overload)」とは?

C#で自分自身を指す「thisキーワード」とは?

親クラスの機能を使う「baseキーワード」とは?

インスタンス不要で使える「static(静的)」とは?

値を変えたくないときに使う「readonly / const(定数)」とは?

メソッドを渡せる仕組み「delegate(デリゲート)」とは?

「何かが起きたら知らせる」仕組み「event(イベント)」とは?

簡潔な書き方ができる「ラムダ式(Lambda Expression)」とは?

C#で使える「LINQ(言語統合クエリ)」とは?

エラーから安全に回復する「例外処理(try-catch-finally)」とは?

意図的にエラーを発生させる「throw(スロー)」とは?

名前空間やリソースを扱う「usingディレクティブ」とは?

クラスの整理に便利な「namespace(名前空間)」とは?

型を柔軟に扱う「ジェネリクス(Generics)」とは?

データの集まりを扱う「コレクション(List / Dictionary / HashSet)」とは?

処理を止めずに進める「非同期処理(async / await)」とは?

簡単に使えて便利!「自動実装プロパティ」と「プロパティ初期化子」