ジェネリックは C# バージョン 2.0 で追加され、言語の最も重要な概念の 1 つです。これらを使用すると、コンパイル時にタイプセーフで、再利用可能でパフォーマンスの高いコードを作成できます。ジェネリックを使用すると、型を事前に知らなくてもコード内で型を使用できます。
ジェネリックは、コレクション、デリゲート、非同期コードなど、.NET のさまざまな場所で使用されます。ジェネリックスを使用すると、コレクションのサイズを事前に知る必要がなく、コードに固有のカスタム データ型を含め、あらゆる要素タイプでジェネリックスを使用できます。 C# は、ジェネリック型 (クラス、インターフェイスなど) とジェネリック メソッドのサポートを提供します。
ジェネリックスには、型パラメーターと型パラメーターがあります。これは、メソッドに渡すことができるパラメータを持つメソッドに似ています。
ジェネリック型を宣言する構文は、山括弧で囲まれた型パラメーターで構成されます。タイプの名前。たとえば、次の例では Locator
public class Locator<T> { }
Locator
var stringLocator = new Locator<string>();
次の例に示すように、クラス メソッドで型パラメーター (T) を使用できます。
public class Locator{ public IList Items { get; set; } public T Locate(int index){ return Items[index]; } } var stringLocator = new Locator<string>(); string item = stringLocator.Locate(2);
ジェネリックのもう 1 つの利点は、エディターが提供する IntelliSense です。 Visual Studio または VS Code で stringLocator.Locate(4) と入力し、メソッド名の上にカーソルを置くと、T の代わりに文字列が返されることが表示されます。結果を文字列以外の型に代入しようとすると、コンパイラはエラーをスローします。たとえば、
// Error: Cannot implicitly convert type 'string' to 'int' [c-sharp]csharp(CS0029) int item = stringLocator.Locate(2);
ジェネリック基本型またはジェネリック インターフェイスから継承する場合、ジェネリック型は型パラメーターを型引数として使用できます。汎用 LinkedList
public class LinkedList<T> : IEnumerable<T>
ジェネリック メソッドは、メソッド内で使用できる型パラメータを宣言し、それをパラメータおよび戻り値の型として使用するメソッドです。次の例の Swap
public class Swapper{ public T Swap<T>(T first, T second){ T temp = first; first = second; second = temp; return temp; } }
ジェネリック型と同様に、ジェネリック メソッドを呼び出すと、厳密に型指定された変数が返されます。
var swapper = new Swapper(); int result = swapper.Swap<int>(5, 3);
複数の共通パラメータを持つことができます。 System.Collections.Generic 名前空間の Dictionary クラスには、キーと値という 2 つの型パラメーターがあります。
public class Dictionary<TKey, TValue>
最後に、何が普遍的であるかを理解することが重要です。型の場合、列挙型を除くすべてをジェネリックにすることができます。これらには、-
型メンバーの場合はメソッドとのみが含まれます。ネストされた型はジェネリックにすることができます。次のメンバーは一般的なものにはできません -
ライブ デモンストレーション
using System; using System.Collections.Generic; class Program{ static void Main(){ var stringLocator = new Locator<string>(){ Items = new string[] { "JavaScript", "CSharp", "Golang" } }; string item = stringLocator.Locate(1); Console.WriteLine(item); // CSharp var swapper = new Swapper(); int a = 5, b = 3; int result = swapper.Swap<int>(ref a, ref b); Console.WriteLine($"a = {a}, b = {b}"); } } public class Locator<T>{ public IList<T> Items { get; set; } public T Locate(int index){ return Items[index]; } } public class Swapper{ public T Swap<T>(ref T first, ref T second){ T temp = first; first = second; second = temp; return temp; } }
CSharp a = 3, b = 5
以上がC# でジェネリックスがどのように機能するかを説明するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。