[C# チュートリアル] C# ジェネリックス
C# ジェネリック
ジェネリックを使用すると、プログラムで実際に使用されるまで、クラスまたはメソッド内のプログラミング要素のデータ型の仕様の書き込みを延期できます。つまり、ジェネリックを使用すると、あらゆるデータ型を処理できるクラスまたはメソッドを作成できます。
データ型の置換パラメータを通じてクラスまたはメソッドの仕様を記述することができます。コンパイラは、クラスのコンストラクターまたはメソッドへの関数呼び出しを検出すると、指定されたデータ型を処理するコードを生成します。次の簡単な例は、この概念を理解するのに役立ちます:
using System; using System.Collections.Generic; namespace GenericApplication { public class MyGenericArray<T> { private T[] array; public MyGenericArray(int size) { array = new T[size + 1]; } public T getItem(int index) { return array[index]; } public void setItem(int index, T value) { array[index] = value; } } class Tester { static void Main(string[] args) { // 声明一个整型数组 MyGenericArray<int> intArray = new MyGenericArray<int>(5); // 设置值 for (int c = 0; c < 5; c++) { intArray.setItem(c, c*5); } // 获取值 for (int c = 0; c < 5; c++) { Console.Write(intArray.getItem(c) + " "); } Console.WriteLine(); // 声明一个字符数组 MyGenericArray<char> charArray = new MyGenericArray<char>(5); // 设置值 for (int c = 0; c < 5; c++) { charArray.setItem(c, (char)(c+97)); } // 获取值 for (int c = 0; c < 5; c++) { Console.Write(charArray.getItem(c) + " "); } Console.WriteLine(); Console.ReadKey(); } } }
上記のコードがコンパイルされて実行されると、次の結果が生成されます:
0 5 10 15 20 a b c d e
ジェネリックの特徴
ジェネリックの使用は、特にプログラムの機能を強化するテクノロジです。次の側面で:
コードの再利用を最大化し、型の安全性を保護し、パフォーマンスを向上させるのに役立ちます。
汎用コレクションクラスを作成できます。 .NET Framework クラス ライブラリには、System.Collections.Generic 名前空間に新しいジェネリック コレクション クラスが含まれています。これらの汎用コレクション クラスを、 System.Collections のコレクション クラスの代わりに使用できます。
独自の汎用インターフェイス、汎用クラス、汎用メソッド、汎用イベント、汎用デリゲートを作成できます。
特定のデータ型のメソッドにアクセスするようにジェネリック クラスを制約できます。
ジェネリック データ型で使用される型に関する情報は、実行時にリフレクションを使用して取得できます。
ジェネリック メソッド
上の例ではジェネリック クラスを使用しており、型パラメーターを通じてジェネリック メソッドを宣言できます。次のプログラムは、この概念を示しています:
using System; using System.Collections.Generic; namespace GenericMethodAppl { class Program { static void Swap<T>(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; } static void Main(string[] args) { int a, b; char c, d; a = 10; b = 20; c = 'I'; d = 'V'; // 在交换之前显示值 Console.WriteLine("Int values before calling swap:"); Console.WriteLine("a = {0}, b = {1}", a, b); Console.WriteLine("Char values before calling swap:"); Console.WriteLine("c = {0}, d = {1}", c, d); // 调用 swap Swap<int>(ref a, ref b); Swap<char>(ref c, ref d); // 在交换之后显示值 Console.WriteLine("Int values after calling swap:"); Console.WriteLine("a = {0}, b = {1}", a, b); Console.WriteLine("Char values after calling swap:"); Console.WriteLine("c = {0}, d = {1}", c, d); Console.ReadKey(); } } }
上記のコードがコンパイルされ実行されると、次の結果が生成されます:
Int values before calling swap: a = 10, b = 20 Char values before calling swap: c = I, d = V Int values after calling swap: a = 20, b = 10 Char values after calling swap: c = V, d = I
汎用デリゲート
型パラメーターを使用して汎用デリゲートを定義できます。例:
delegate T NumberChanger<T>(T n);
次の例は、デリゲートの使用を示しています:
using System; using System.Collections.Generic; delegate T NumberChanger<T>(T n); namespace GenericDelegateAppl { class TestDelegate { static int num = 10; public static int AddNum(int p) { num += p; return num; } public static int MultNum(int q) { num *= q; return num; } public static int getNum() { return num; } static void Main(string[] args) { // 创建委托实例 NumberChangernc1 = new NumberChanger (AddNum); NumberChanger nc2 = new NumberChanger (MultNum); // 使用委托对象调用方法 nc1(25); Console.WriteLine("Value of Num: {0}", getNum()); nc2(5); Console.WriteLine("Value of Num: {0}", getNum()); Console.ReadKey(); } } }
上記のコードがコンパイルされて実行されると、次の結果が生成されます:
Value of Num: 35 Value of Num: 175
上記は [c# チュートリアル] C# ジェネリックです(一般的な) コンテンツ。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) にご注意ください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。
