允许函数接受泛型类型的设计模式

本文关键字:泛型类型 设计模式 许函数 函数 | 更新日期: 2023-09-27 18:19:06

我有两个类:

public abstract class Uniform<T>
public class UniformMatrix4 : Uniform<Matrix4>

(到目前为止…会有更多的实现不同类型)

现在让我们说我想写一个函数,将接受任何统一的对象…但我不能这样做,因为没有Uniform类,只有通用的Uniform<T>类。那么解决这个问题的最佳方法是什么呢?

  1. 使Uniform<T>实现IUniform
  2. 使Uniform<T>扩展Uniform
  3. 让我所有的函数接受统一是通用的,这样他们就可以直接采取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) { ... }