C# ジェネリック (ジェネリック)

概要:

C# のジェネリックは、クラス、メソッド、デリゲートを作成するときにパラメーター化された型の使用を可能にするメカニズムです。ジェネリックを使用すると、型変換や同様のコードの書き換えを回避して、より一般的で再利用可能なコードを作成できます。

ジェネリックの基本的な構文は次のとおりです。

class ClassName<T>
{
    
    
    // 泛型类的定义
}

void MethodName<T>(T parameter)
{
    
    
    // 泛型方法的定义
}

ジェネリック クラスまたはメソッドでは、T はクラスのフィールド、メソッドのパラメーター、および戻り値の型を定義するために使用できる型パラメーターです。

ジェネリックを使用する一般的な例をいくつか示します。

汎用クラス:

class GenericClass<T>
{
    
    
    private T value;

    public GenericClass(T value)
    {
    
    
        this.value = value;
    }

    public T GetValue()
    {
    
    
        return value;
    }
}

GenericClass<int> intObject = new GenericClass<int>(5);
int intValue = intObject.GetValue();

GenericClass<string> stringObject = new GenericClass<string>("Hello");
string stringValue = stringObject.GetValue();

一般的な方法:

T Max<T>(T a, T b)
{
    
    
    return a.CompareTo(b) > 0 ? a : b;
}

int maxInt = Max<int>(5, 3);
string maxString = Max<string>("apple", "banana");

一般的な渡し方:

//サブクラスも特定の型を認識していないため、後で汎用的な特殊化が必要な場所に型を渡します。

        public class person<T>
        {
    
    
            public T Name {
    
     get; set; }
        }
        //泛型方法中也可以定义多个泛型
        public class teacher<T, U> : person<T>
        {
    
    
            public U date {
    
     get; set; }

            public override string? ToString()
            {
    
    
                string str = "";
                str += $"name:{
      
      Name}\n";
                str += $"date:{
      
      date}";
                return str.ToString();
            }
        }
        private static void Main(string[] args)
        {
    
    
            teacher<string, int> t1 = new teacher<string, int>();
            t1.Name = "xiaoming";
            t1.date = 2023;
            Console.WriteLine(t1.ToString());
        }

ジェネリック制約 (Constraints) を使用すると、ジェネリック型パラメーターを制限し、型パラメーターが満たさなければならない条件を指定できます。たとえば、where キーワードを使用すると、型パラメータを特定の基本クラス、インターフェイス、またはパラメータなしのコンストラクタに制限できます。

一般的な制約の例:

class GenericClass<T> where T : IComparable
{
    
    
    // T必须实现IComparable接口
}

T Max<T>(T a, T b) where T : IComparable
{
    
    
    // T必须实现IComparable接口
}

class MyClass<T> where T : new()
{
    
    
    // T必须具有无参数构造函数
}

クラスとメソッドに加えて、C# は汎用インターフェイスと汎用デリゲートもサポートします。ジェネリック インターフェイスとジェネリック デリゲートは、ジェネリック クラスやメソッドと同様の方法で使用されます。

ジェネリックの利点には、コードの再利用、型安全性、パフォーマンスの最適化、読みやすさの向上などがあります。ジェネリックスを使用すると、より柔軟で汎用性の高いコードを作成でき、コードの保守性と拡張性が向上します。

おすすめ

転載: blog.csdn.net/qq_41942413/article/details/132614021