1. ホーム
  2. c#

[解決済み] C#の<T>は何を意味するのか [重複].

2022-10-17 02:41:08

質問

私はC#の初心者で、受け取ったプロジェクトのためにいくつかのコードを修正するために直接飛び込んでいます。しかし、私はこのようなコードを見続けています。

class SampleCollection<T>

の意味がわからないし

<T> 

は、その意味も呼び名も

もし誰かが、この概念が何と呼ばれているかを挙げるのを手伝ってくれるなら、私はそれをネットで検索することができます。しかし、今現在、私は何も知らないのです。

どのように解決するのですか?

これは 一般的な型パラメータ .

汎用型パラメータは、メソッドやクラス宣言で具象型を指定することなく、コンパイル時に任意の型Tをメソッドに指定できるようにするものです。

例えば

public T[] Reverse<T>(T[] array)
{
    var result = new T[array.Length];
    int j=0;
    for(int i=array.Length - 1; i>= 0; i--)
    {
        result[j] = array[i];
        j++;
    }
    return result;
}

は配列の要素を反転させます。 ここで重要なのは、配列の要素がどのような型であっても、この関数は動作することです。 メソッド呼び出しの際に型を指定することで、型の安全性は保証されます。

では、文字列の配列を反転させるには。

string[] array = new string[] { "1", "2", "3", "4", "5" };
var result = reverse(array);

で文字列の配列を生成します。 result{ "5", "4", "3", "2", "1" }

これは、次のような普通の(汎用的でない)メソッドを呼び出したのと同じ効果があります。

public string[] Reverse(string[] array)
{
    var result = new string[array.Length];
    int j=0;
    for(int i=array.Length - 1; i >= 0; i--)
    {
        result[j] = array[i];
        j++;
    }
    return result;
}

コンパイラは array が文字列を含んでいることを認識し、文字列の配列を返します。 タイプ string が代入される。 T 型パラメータに置き換えられます。


一般的な型パラメータは、一般的なクラスを作成するために使用することもできます。 あなたが挙げた例では SampleCollection<T> を使用した場合、その T は任意の型のプレースホルダーであることを意味します。 SampleCollection はオブジェクトのコレクションを表すことができ、その型はコレクションを作成するときに指定します。

では

var collection = new SampleCollection<string>();

は、文字列を格納できるコレクションを作成します。 このコレクションは Reverse メソッドは、コレクションのメンバを反転させるために多少異なる形で使用することができます。