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

时间:2011-12-31 23:00:06

标签: c# generics design-patterns

我有两节课:

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

(到目前为止......将会有更多实现不同类型的内容)

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

  1. Uniform<T>实施IUniform
  2. Uniform<T>延长Uniform
  3. 让我接受统一的所有功能都是通用的,以便他们可以直接使用Uniform<T>吗?

3 个答案:

答案 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) { ... }