我有Method1, Method2和Method3。
Method1返回Type int。Method2返回Type字符串
而Method3根据method1或method2的返回类型接受int或string形参。
public void Method3 (ParameterType parm) { logic... }
问题是:如何根据Method1和Method2的类型切换传递的ParameterType。这当然是这个问题的简化版。实际上,有许多方法返回不同类型的值。如何根据当前调用的方法,例如Method1,提取其类型,然后将Method3的ParameterType替换为新的类型
您可以定义一个泛型方法,例如
public void Method3<T>(T parm)
{
// ...
}
您只需调用该方法并传递一个参数,该参数的类型为该调用修复了T
。这意味着T
可以是任何类型,因此方法内部的代码必须以适用于任何类型的方式使用parm
。
可以对泛型类型参数应用某些约束,例如,它必须是或继承一个特定的类,必须实现一个特定的接口,或者必须有一个无参数的构造函数。没有任何约束可以同时适用于int
和string
。
如果你不能为所有可能作为参数传递的类型编写通用代码,那么单个泛型方法就不是一个选择。你必须重载该方法,并编写两个或多个泛型和/或非泛型方法,其参数涵盖你希望能够接受的类型范围,例如
public void Method3<T>(T parm) where T : class
{
// ...
}
public void Method3(int parm)
{
// ...
}
public void Method3(double parm)
{
// ...
}
这叫做重载:
public void Method3 (int parm) { logic... }
public void Method3 (string parm) { logic... }
public void Foo(){
Method3(Method1());
Method3(Method2());
}