一尘不染

是否有合理的方法来处理C#泛型中的“默认”类型参数?

c#

在C ++模板中,可以指定某个类型参数为默认值。即,除非明确指定,否则它将使用类型T。

可以在C#中完成或近似吗?

我正在寻找类似的东西:

public class MyTemplate<T1, T2=string> {}

因此,该类型的实例未明确指定T2

MyTemplate<int> t = new MyTemplate<int>();

本质上将是:

MyTemplate<int, string> t = new MyTemplate<int, string>();

最终,我正在研究一种情况,其中有一个模板被广泛使用,但是我正在考虑使用附加的类型参数进行扩展。我想我可以继承,但是我很好奇是否还有其他选择。


阅读 689

收藏
2020-05-19

共1个答案

一尘不染

子类化是最好的选择。

我可以将您的主要通用类子类化:

class BaseGeneric<T,U>

有特定的班级

class MyGeneric<T> : BaseGeneric<T, string>

这样可以很容易地将逻辑保持在一个位置(基类),而且还可以轻松提供这两种用法选项。根据班级的不同,可能很少需要额外的工作来实现这一目标。

2020-05-19