我有两节课:
public abstract class Uniform<T>
public class UniformMatrix4 : Uniform<Matrix4>
(到目前为止......将会有更多实现不同类型的内容)
现在我想写一个能接受任何统一对象的函数......但我不能这样做,因为没有名为Uniform
的类,只有通用Uniform<T>
。那么解决这个问题的最佳方法是什么?
Uniform<T>
实施IUniform
Uniform<T>
延长Uniform
Uniform<T>
吗?答案 0 :(得分:5)
让你的方法也是通用的,你很好。
请注意,如果需要,您始终可以选择在函数上使用所有泛型类型参数,如下所示:
public void MyMethod<TUniform, T>(TUniform uniform) where TUniform: Uniform<T> {...}
只要有参数,编译器通常会自己推断出类型参数,这样调用实际上就像C#源代码中的普通方法调用一样:
UniformMatrix4 uniform;
MyMethod(uniform); // the types of the generic functions are inferred
答案 1 :(得分:3)
不可否认地发布了这个答案,但认为这可能是正确的:
public static Uniform<dynamic> MyMethod(dynamic myObject) {
//do stuff
return uniform;
}
以下是关于此主题的Dino Esposito博客:
http://msdn.microsoft.com/en-us/magazine/ff796227.aspx
干杯,
马特
答案 2 :(得分:2)
public void MyMethod<T>(Uniform<T> uniform) { ... }