検索
ホームページバックエンド開発C#.Net チュートリアルC# でジェネリックスがどのように機能するかを説明する

解释泛型在 C# 中的工作原理

ジェネリックは C# バージョン 2.0 で追加され、言語の最も重要な概念の 1 つです。これらを使用すると、コンパイル時にタイプセーフで、再利用可能でパフォーマンスの高いコードを作成できます。ジェネリックを使用すると、型を事前に知らなくてもコード内で型を使用できます。

ジェネリックは、コレクション、デリゲート、非同期コードなど、.NET のさまざまな場所で使用されます。ジェネリックスを使用すると、コレクションのサイズを事前に知る必要がなく、コードに固有のカスタム データ型を含め、あらゆる要素タイプでジェネリックスを使用できます。 C# は、ジェネリック型 (クラス、インターフェイスなど) とジェネリック メソッドのサポートを提供します。

ジェネリックスには、型パラメーターと型パラメーターがあります。これは、メソッドに渡すことができるパラメータを持つメソッドに似ています。

ジェネリック型

ジェネリック型を宣言する構文は、山括弧で囲まれた型パラメーターで構成されます。タイプの名前。たとえば、次の例では Locator がジェネリック クラスです。

public class Locator<T>
{

}

Locator のインスタンスを作成するには、new キーワードに続いてクラス名を使用します。ただし、T の代わりにパラメータとして渡される実際の型を指定できます。次の例では、文字列型をパラメータとして渡します。

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 &#39;string&#39; to &#39;int&#39; [c-sharp]csharp(CS0029)
int item = stringLocator.Locate(2);

ジェネリック基本型またはジェネリック インターフェイスから継承する場合、ジェネリック型は型パラメーターを型引数として使用できます。汎用 LinkedList 型は、汎用 IEnumerable インターフェイスおよび他のインターフェイスを実装します。

public class LinkedList<T> : IEnumerable<T>

ジェネリック メソッド

ジェネリック メソッドは、メソッド内で使用できる型パラメータを宣言し、それをパラメータおよび戻り値の型として使用するメソッドです。次の例の Swap は、型 T の 2 つのパラメーターを受け取り、T のインスタンスを返すジェネリック メソッドです。

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>

最後に、何が普遍的であるかを理解することが重要です。型の場合、列挙型を除くすべてをジェネリックにすることができます。これらには、-

  • Class
  • Structure
  • Interface
  • Delegate

型メンバーの場合はメソッドとのみが含まれます。ネストされた型はジェネリックにすることができます。次のメンバーは一般的なものにはできません -

  • Fields
  • Properties
  • Indexer
  • Constructor li>
  • Event
  • ターミネーター

ライブ デモンストレーション

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 サイトの他の関連記事を参照してください。

声明
この記事はtutorialspointで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
C#.NET:.NETエコシステムを使用したアプリケーションの構築C#.NET:.NETエコシステムを使用したアプリケーションの構築Apr 27, 2025 am 12:12 AM

.NETを使用してアプリケーションを構築する方法は? .NETを使用してアプリケーションを構築することは、次の手順を通じて達成できます。1)C#言語やクロスプラットフォーム開発サポートを含む.NETの基本を理解します。 2)コンポーネントや.NETエコシステムの作業原則などのコア概念を学習します。 3)単純なコンソールアプリケーションから複雑なWebAPISおよびデータベース操作まで、基本的および高度な使用をマスターします。 4)構成やデータベース接続の問題など、一般的なエラーとデバッグ手法に精通している。 5)アプリケーションのパフォーマンスの最適化と非同期プログラミングやキャッシュなどのベストプラクティス。

汎用性のある.NET言語としてのC#:アプリケーションと例汎用性のある.NET言語としてのC#:アプリケーションと例Apr 26, 2025 am 12:26 AM

C#は、エンタープライズレベルのアプリケーション、ゲーム開発、モバイルアプリケーション、Web開発で広く使用されています。 1)エンタープライズレベルのアプリケーションでは、C#がasp.netcoreにWebAPIを開発するためによく使用されます。 2)ゲーム開発では、C#がUnityエンジンと組み合わされて、ロールコントロールやその他の機能を実現します。 3)C#は、コードの柔軟性とアプリケーションのパフォーマンスを改善するために、多型と非同期プログラミングをサポートします。

Web、デスクトップ、モバイル開発用のC#.NETWeb、デスクトップ、モバイル開発用のC#.NETApr 25, 2025 am 12:01 AM

C#と.NETは、Web、デスクトップ、モバイル開発に適しています。 1)Web開発では、ASP.Netcoreがクロスプラットフォーム開発をサポートしています。 2)デスクトップ開発では、さまざまなニーズに適したWPFとWINFORMSを使用します。 3)モバイル開発は、Xamarinを介したクロスプラットフォームアプリケーションを実現します。

C#.NETエコシステム:フレームワーク、ライブラリ、およびツールC#.NETエコシステム:フレームワーク、ライブラリ、およびツールApr 24, 2025 am 12:02 AM

C#.NETエコシステムは、開発者がアプリケーションを効率的に構築できるようにするための豊富なフレームワークとライブラリを提供します。 1.ASP.NETCOREは、高性能Webアプリケーションの構築に使用されます。2.EntityFrameWorkCoreは、データベース操作に使用されます。これらのツールの使用とベストプラクティスを理解することにより、開発者はアプリケーションの品質とパフォーマンスを向上させることができます。

azure/awsへのc#.netアプリケーションの展開:ステップバイステップガイドazure/awsへのc#.netアプリケーションの展開:ステップバイステップガイドApr 23, 2025 am 12:06 AM

c#.netアプリをAzureまたはAWSに展開する方法は?答えは、AzureAppServiceとAwselasticBeanStalkを使用することです。 1。Azureでは、AzureAppServiceとAzurePipelinesを使用して展開を自動化します。 2。AWSでは、Amazon ElasticBeanstalkとAwslambdaを使用して、展開とサーバーレス計算を実装します。

C#.NET:強力なプログラミング言語の紹介C#.NET:強力なプログラミング言語の紹介Apr 22, 2025 am 12:04 AM

C#と.NETの組み合わせにより、開発者に強力なプログラミング環境を提供します。 1)C#は、多型と非同期プログラミングをサポートします。2).NETは、クロスプラットフォーム機能と同時処理メカニズムを提供し、デスクトップ、Web、モバイルアプリケーション開発で広く使用されています。

.NETフレームワーク対C#:用語のデコード.NETフレームワーク対C#:用語のデコードApr 21, 2025 am 12:05 AM

.NetFrameworkはソフトウェアフレームワークであり、C#はプログラミング言語です。 1..netframeworkは、デスクトップ、Web、モバイルアプリケーションの開発をサポートするライブラリとサービスを提供します。 2.C#は.NetFrameWork用に設計されており、最新のプログラミング機能をサポートしています。 3..NetFrameworkはCLRを介してコード実行を管理し、C#コードはILにコンパイルされ、CLRによって実行されます。 4. .NetFrameWorkを使用してアプリケーションをすばやく開発し、C#はLINQなどの高度な関数を提供します。 5.一般的なエラーには、タイプ変換と非同期プログラミングデッドロックが含まれます。 VisualStudioツールは、デバッグに必要です。

C#.NETの分解:初心者の概要C#.NETの分解:初心者の概要Apr 20, 2025 am 12:11 AM

C#は、Microsoftが開発した最新のオブジェクト指向プログラミング言語であり、.NETはMicrosoftが提供する開発フレームワークです。 C#は、CのパフォーマンスとJavaのシンプルさを組み合わせており、さまざまなアプリケーションの構築に適しています。 .NETフレームワークは、複数の言語をサポートし、ガベージコレクションメカニズムを提供し、メモリ管理を簡素化します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!