允许函数接受泛型类型的设计模式
本文关键字:泛型类型 设计模式 许函数 函数 | 更新日期: 2023-09-27 18:19:06
我有两个类:
public abstract class Uniform<T>
public class UniformMatrix4 : Uniform<Matrix4>
(到目前为止…会有更多的实现不同类型)
现在让我们说我想写一个函数,将接受任何统一的对象…但我不能这样做,因为没有Uniform
类,只有通用的Uniform<T>
类。那么解决这个问题的最佳方法是什么呢?
- 使
Uniform<T>
实现IUniform
- 使
Uniform<T>
扩展Uniform
- 让我所有的函数接受统一是通用的,这样他们就可以直接采取
Uniform<T>
?
让你的方法也是泛型的,这样你就很好了。
请注意,如果需要,您始终可以选择在函数上使用所有泛型类型参数,如下所示:
public void MyMethod<TUniform, T>(TUniform uniform) where TUniform: Uniform<T> {...}
每当你有一个形参时,编译器通常会自己推断类型参数,因此调用实际上看起来像c#源代码中的普通方法调用:
UniformMatrix4 uniform;
MyMethod(uniform); // the types of the generic functions are inferred
我承认我很害怕发布这个答案,但我认为它可能是正确的:
public static Uniform<dynamic> MyMethod(dynamic myObject) {
//do stuff
return uniform;
}
这是Dino Esposito关于这个话题的博客:
http://msdn.microsoft.com/en-us/magazine/ff796227.aspx欢呼,马特
public void MyMethod<T>(Uniform<T> uniform) { ... }