c#泛型(generic)

概述:

C#中的泛型(Generics)是一种允许在编写类、方法和委托时使用参数化类型的机制。泛型允许我们编写更通用、可重用的代码,可以避免类型转换和重复编写类似的代码。

泛型的基本语法如下所示:

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