【发布时间】:2014-09-05 12:02:58
【问题描述】:
我正在尝试在 C# 中创建一个通用方法,它将根据其主体中的参数数据类型调用不同的方法,然后处理它们的结果。我试图通过创建一个通用包装方法来实现这一点,然后提供处理方法的几个重载 - 包括一个通用的,如果没有特定的重载可用。
当我直接调用处理方法时,正确选择了适当的版本。但是,当我从包装方法调用它时,它总是选择通用的,即使我传递给它的特定数据类型存在匹配的重载。
有什么方法可以调整代码以使其按我需要的方式运行?还是我必须使用不同的方法。
我需要代码与 Mono 2.6 兼容。
using System;
class Program
{
static void Func<T>(T val)
{
Console.WriteLine("Generic Func");
}
static void Func(int val)
{
Console.WriteLine("Int Func");
}
static void Func(string val)
{
Console.WriteLine("String Func");
}
static void FuncWrap<T>(T val)
{
Console.Write("Wrap: ");
Func(val);
}
static void Main(string[] args)
{
Func(2);
Func("Potato");
Func(2.0);
FuncWrap(2);
FuncWrap("Potato");
FuncWrap(2.0);
Console.Read();
}
}
【问题讨论】:
-
您也可以使用带有 int 和字符串的 FuncWrap 重载(或者直接使用 Func 方法而不进行包装)。
标签: c# generics mono unity3d polymorphism