C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のジェネリックメソッドとは?基本構文から実装例までわかりやすく解説

ジェネリック(Generics)とは、任意のデータ型に対応できるクラスやメソッドを記述するためのC#の機能です。型ごとに似たようなコードを何度も書く必要がなくなり、コードの再利用性と型安全性が大きく向上します。

ジェネリックメソッドは、メソッド名の後に型パラメータ <T> を宣言することで定義できます。

static void Swap<T>(ref T lhs, ref T rhs) { }

上記のジェネリックメソッドを呼び出す際は、次のように記述します。呼び出し時にコンパイラが引数の型から自動的に型パラメータを推論してくれるため、明示的な指定は不要です。

Swap(ref a, ref b);

それでは、C#でジェネリックメソッドを作成する具体的な手順を見ていきましょう。次のサンプルでは、1つのSwapメソッドをint型とchar型の両方で使い回しています。

サンプルコード

using System;
using System.Collections.Generic;

namespace Demo {
   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 = 45;
         b = 60;
         c = 'K';
         d = 'P';
         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(ref a, ref b);
         Swap(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 = 45, b = 60
Char values before calling swap:
c = K, d = P
Int values after calling swap:
a = 60, b = 45
Char values after calling swap:
c = P, d = K

ポイント解説

この例では、Swap<T> メソッドはたった1つしか定義されていませんが、int型とchar型というまったく異なるデータ型に対して正しく動作しています。これは、メソッド呼び出し時にコンパイラが渡された引数の型を推論し、適切な型パラメータを自動的に割り当てているためです。

ジェネリックを使用する主なメリットは以下のとおりです。

  • コードの再利用性:型ごとにオーバーロードを個別に用意する必要がありません。
  • 型安全性:object型へのキャストが不要になり、実行時の型エラーを防げます。
  • パフォーマンス:値型でもボックス化が発生しないため、処理効率が向上します。
  1. 【C#入門】パラメーターの渡し方を解説!値渡しと参照渡しの違いとは?

    C#では、パラメーターを受け取るメソッドを呼び出す際、引数をメソッドに渡す方法がいくつかあります。代表的な方法として「値パラメーター(値渡し)」と「参照パラメーター(参照渡し)」の2つがあります。それぞれの仕組みと動作の違いを詳しく見ていきましょう。 値パラメーター(値渡し) 値渡しでは、引数の実際の値が関数の仮引数にコピーされます。このとき、メソッドが呼び出されると各パラメーターごとに新しいストレージ領域が作成され、そこへ実引数の値がコピーされます。 そのため、メソッド内でパラメーターにどのような変更を加えても、呼び出し元の引数には一切影響しません。C#では、これが最も基本的なパラメーター

  2. Javaのクラスメソッド(静的メソッド)とは?基本から使い方まで解説

    Javaにおけるクラスメソッド(静的メソッド)とは、特定のオブジェクトのインスタンスではなく、クラスそのものに対して呼び出されるメソッドのことです。static修飾子を付けることで、すべてのクラスインスタンス間で同じ実装が保証されます。静的メソッドはインスタンス化せずに呼び出すことができるため、アクセスできるのはクラス内の他の静的メンバー(staticなフィールドやメソッド)のみです。インスタンス変数や非staticメソッドには直接アクセスできない点に注意しましょう。Javaの標準ライブラリにも多くの静的メソッドが用意されています。代表的な例としては、Math.random()、System.