天天看点

C#泛型类和泛型方法

泛型可以理解为广泛的类型,或者不确定的类型,也就是说允许我们编写一个可以与任何数据类型同时运行,且不报错的方法或者类。

泛型类

泛型类是指这个类的某些字段的类型是不确定的,只有在构造的时候才能确定下的类。

泛型类示例

class Program
    {
        static void Main(string[] args)
        {
            MyClass<int>  mc=new MyClass<int>(12,34);
        }
    }
    class  MyClass<T>
    {
        private T a;
        private T b;
        public MyClass(T a,T b)
        {
            this.a = a;
            this.b = b;
        }        
    }
           

在构造的时候,声明这个类中的字段为int类型,并转递对应的参数。

泛型方法

泛型方法与泛型类类似,方法的返回类型和参数类型都可以使用泛型。如下:

public static T GetT<T>(T a)
{
    return a;
}
           

泛型方法的示例

public static Type GetT<T>(T a)
{
    return a.GetType();
}
static void Main(string[] args)
{
   Console.WriteLine(GetT(1));
   Console.WriteLine(GetT(0.4435f));
   Console.WriteLine(GetT("sssss"));
}
           

结果为:

System.Int32
System.Single
System.String
           

上述方法为查看数据类型的Type的方法,用来检验,传输类型是否正确。

注意

泛型类和泛型方法都是我们在构造或者调用的时候声明类型,如果要是我实际遇到的问题中有两种同时存在的不确定的类型呢?

答案:可以同时声明两种泛型在同一个类或者方法中

我们对上面的泛型类的泛型方法进行改造,结果如下:

泛型类:

class  MyClass<T,A>//两个泛型,数据类型可以不同了
{
    private T a;
    private A b;
    public MyClass(T a,A b)
    {
        this.a = a;
        this.b = b;
    }        
}
           

泛型方法:

public static String GetT<T,A>(T a,A b)
{
    return a + "" + b;
}
           

注意:泛型不一定用大写的字母T来表示,其它的也可以,但是T被广泛应用,也推荐大家使用T。

欢迎评价和指正, 谢谢。