首页 > 编程笔记 > C#笔记 阅读:11

C#泛型方法重载(附带实例)

C#中,泛型方法的重载可细分为两种情况,分别是一般类中的泛型方法重载和泛型类中的泛型方法重载。

C#一般类中的泛型方法重载

C#允许一般类内含有泛型方法,在一般类内创建泛型方法,详情可以参考下列实例。

【实例 1】在一般类 MyTest 内创建泛型方法。
MyTest obj = new MyTest();
obj.PrintInfo<int>(50); // 由<int>推断数据类型是int
obj.PrintInfo(60); // 由参数60推断数据类型是int
obj.PrintInfo<string>("Hello C#"); // 由<string>推断数据类型是string
obj.PrintInfo("Going to C# World!"); // 由参数"Going to C# World!"推断数据类型是string

public class MyTest
{
    public void PrintInfo<T>(T data)
    {
        Console.WriteLine(data);
    }
}
执行结果为:

50
60
Hello C#
Going to C# World!


在一般类中重载泛型方法,实例如下。

【实例 2】在一般类中创建泛型方法重载。
MyTest obj = new MyTest();
obj.Data("Going to C# World");
obj.Data<string>("王者归来");
obj.Data(50);
obj.Data<int>(100); // 使用Data<T>

public class MyTest
{
    public void Data<T>(T t)
    {
        Console.WriteLine($"使用Data<T>:{t.GetType().Name}:{t}");
    }
    public void Data(int a)
    {
        Console.WriteLine($"使用Data:{a.GetType().Name}:{a}");
    }
}
执行结果为:

使用Data<T>:String:Going to C# World
使用Data<T>:String:王者归来
使用Data:Int32:50
使用Data<T>:Int32:100

上述需要注意的是第 5 行 obj.Data<int>(100),其参数是整数,但是因为已经有 <int> 定义,所以调用的是 Data<T> 方法。

C#泛型类中的泛型方法重载

【实例 3】泛型类中的泛型方法重载。
MyTest<int> xInt = new MyTest<int>();
xInt.Data(10);
xInt.Data("10"); // 使用Data(string)
MyTest<string> xString = new MyTest<string>();
xString.Data("Going to C#");

public class MyTest<T>
{
    public void Data(T item)
    {
        Console.WriteLine($"使用Data T:{item}");
    }
    public void Data(string item)
    {
        Console.WriteLine($"使用Data string:{item}");
    }
}
执行结果为:

使用Data T:10
使用Data string:10
使用Data string:Going to C#

上述必须留意的是第 3 行,虽然使用 xInt 对象,代表这是整数类型,但是参数实际上是字符串,这会调用第 13 行的字符串 Data(string item) 方法。

相关文章