在C++模板中,可以指定某个类型参数为默认值。即,除非明确指定,否则它将使用类型T。
这可以在C#中完成或近似吗?
我正在寻找类似这样的东西:
public class MyTemplate<T1, T2=string> {}
这样,未显式指定T2
的类型的实例
MyTemplate<int> t = new MyTemplate<int>();
本质上是:
MyTemplate<int, string> t = new MyTemplate<int, string>();
最终,我考虑的是这样一种情况,其中有一个使用相当广泛的模板,但我正在考虑扩展一个额外的类型参数。我想我可以子类化,但我很好奇是否有其他的选择。
发布于 2009-04-01 23:53:39
子类化是最好的选择。
我会继承你的主要泛型类:
class BaseGeneric<T,U>
使用特定的类
class MyGeneric<T> : BaseGeneric<T, string>
这使得将您的逻辑放在一个地方(基类)变得很容易,但也很容易提供两个使用选项。根据类的不同,可能只需要很少的额外工作就可以实现这一点。
发布于 2015-12-02 10:23:08
您还可以像这样创建一个类重载
public class MyTemplate<T1, T2> {
public T1 Prop1 { get; set; }
public T2 Prop2 { get; set; }
}
public class MyTemplate<T1> : MyTemplate<T1, string>{}
发布于 2009-04-01 23:54:57
C#不支持这样的功能。
正如您所说,您可以子类化它(如果它不是密封的,并复制所有构造函数声明),但这是完全不同的事情。
https://stackoverflow.com/questions/707780
复制相似问题