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

mpe*_*pen 6 c# generics design-patterns

我有两节课:

public abstract class Uniform<T>
public class UniformMatrix4 : Uniform<Matrix4>
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 制作Uniform<T>工具IUniform
  2. Uniform<T>延长Uniform
  3. 使我接受Uniform的所有函数都是通用的,以便它们可以Uniform<T>直接使用?

Luc*_*ero 5

让你的方法也通用,你也很好.

请注意,如果需要,您始终可以选择在函数上使用所有泛型类型参数,如下所示:

public void MyMethod<TUniform, T>(TUniform uniform) where TUniform: Uniform<T> {...}
Run Code Online (Sandbox Code Playgroud)

只要有参数,编译器通常就会自己推断出类型参数,这样调用实际上就像C#源代码中的普通方法调用一样:

UniformMatrix4 uniform;
MyMethod(uniform); // the types of the generic functions are inferred
Run Code Online (Sandbox Code Playgroud)