C#のジェネリクス
ジェネリクスによって型安全で再利用可能なコード構造を作る仕組みを学びます
「C#のジェネリクス」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン1/5です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全5レッスンが含まれています。
ジェネリックの概要
C# のジェネリック
「C# の高度な機能」の最初のレッスンへようこそ!このレッスンでは、柔軟で再利用可能なコードを作成できる C# の強力な機能、ジェネリックについて学びます。それでは始めましょう!

ジェネリックとは
ジェネリックとは
ジェネリックは、格納または使用するデータ型のプレースホルダーを指定して、クラス、メソッド、データ構造を定義できる C# の機能です。ジェネリックによって、型安全性とコードの再利用性を実現できます。
例: ジェネリックリスト(List<T>)では、型安全性を確保しながら、任意の型の要素を格納できます。
ジェネリッククラスの作成
ジェネリッククラスの作成
<T> 構文を使用してジェネリッククラスを定義できます。ここで T は型パラメーターを表します。例:
重要なポイント: 型安全性を維持しながら任意のデータ型で動作するクラスを作成するには、ジェネリックを使用してください。
using System;
class GenericBox<T> {
public T Value { get; set; }
public void Display() {
Console.WriteLine("Value: " + Value);
}
}
class Program {
static void Main() {
GenericBox<int> intBox = new GenericBox<int> { Value = 42 };
intBox.Display(); // Outputs: Value: 42
GenericBox<string> stringBox = new GenericBox<string> { Value = "Hello, Generics!" };
stringBox.Display(); // Outputs: Value: Hello, Generics!
}
}
ジェネリックメソッドの作成
ジェネリックメソッドの作成
クラス内にジェネリックメソッドを定義できます。例:
ヒント: 複数のデータ型に適用できる操作には、ジェネリックメソッドを使用してください。
using System;
class Program {
static void Main() {
PrintValue(42);
PrintValue("Generics are powerful!");
}
static void PrintValue<T>(T value) {
Console.WriteLine("Value: " + value);
}
}
ジェネリック制約
ジェネリック制約
制約によって、型パラメーターとして使用できる型を制限します。例:
where T : struct- T は値型である必要があります。where T : class- T は参照型である必要があります。where T : new()- T にはパラメーターなしのコンストラクターが必要です。
例:
重要なポイント: 制約によってジェネリックの柔軟性が高まり、特定のシナリオに適用しやすくなります。
using System;
class Program {
static void Main() {
DisplayDefault<int>();
DisplayDefault<string>();
}
static void DisplayDefault<T>() where T : new() {
T instance = new T();
Console.WriteLine("Created instance of: " + typeof(T));
}
}
ジェネリックコレクション
ジェネリックコレクション
C# には、組み込みのジェネリックコレクションがいくつか用意されています:
- List<T>: 動的配列に要素のコレクションを格納します。
- Dictionary<TKey, TValue>: 高速な検索のためにキーと値のペアを格納します。
- Queue<T>: 先入れ先出し(FIFO)構造を実装します。
例: ジェネリックリストの使用:
using System;
using System.Collections.Generic;
class Program {
static void Main() {
List<string> names = new List<string> { "Alice", "Bob", "Charlie" };
names.Add("Diana");
foreach (string name in names) {
Console.WriteLine(name);
}
}
}
練習課題
練習課題
キーと値のペアを格納するジェネリッククラス Pair<TKey, TValue> と、キーと値を入れ替えるジェネリックメソッド Swap() を作成してください。例:
using System;
class Pair<TKey, TValue> {
public TKey Key { get; set; }
public TValue Value { get; set; }
public void Swap() {
(Key, Value) = ((TKey)(object)Value, (TValue)(object)Key);
}
public void Display() {
Console.WriteLine($"Key: {Key}, Value: {Value}");
}
}
class Program {
static void Main() {
Pair<string, int> pair = new Pair<string, int> { Key = "Age", Value = 30 };
pair.Display();
pair.Swap();
pair.Display();
}
}
ジェネリックを使用する際のベストプラクティス
ジェネリックを使用する際のベストプラクティス
次のようなベストプラクティスがあります:
- 再利用可能で型安全なクラスとメソッドを作成するために、ジェネリックを使用してください。
- 特定の型要件が必要な場合は、制約を適用してください。
- パフォーマンスと安全性のため、非ジェネリックコレクションよりもジェネリックコレクションを優先してください。
ヒント: 型パラメーターには、型を表す T やキーと値のペアを表す TKey、TValue など、意味のある名前を使用してください。
よくできました!
よくできました!
おめでとうございます!ジェネリックを使って、C#で再利用可能かつ柔軟なコードを作成する方法を学びました。次のレッスンでは、asyncとawaitを使った非同期プログラミングについて学びます。引き続きコーディングに取り組みましょう!

よくある質問
「C#のジェネリクス」レッスンは無料ですか?
はい。「C#のジェネリクス」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全5レッスンが含まれています。
「C#のジェネリクス」で何を学びますか?
ジェネリクスによって型安全で再利用可能なコード構造を作る仕組みを学びます ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/5です。
「C#のジェネリクス」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。