首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对于C#泛型中的“默认”类型参数,有没有一种合理的方法?

对于C#泛型中的“默认”类型参数,有没有一种合理的方法?
EN

Stack Overflow用户
提问于 2009-04-02 07:51:00
回答 5查看 33.6K关注 0票数 98

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

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

我正在寻找类似这样的东西:

代码语言:javascript
复制
public class MyTemplate<T1, T2=string> {}

这样,未显式指定T2的类型的实例

代码语言:javascript
复制
MyTemplate<int> t = new MyTemplate<int>();

本质上是:

代码语言:javascript
复制
MyTemplate<int, string> t = new MyTemplate<int, string>();

最终,我考虑的是这样一种情况,其中有一个使用相当广泛的模板,但我正在考虑扩展一个额外的类型参数。我想我可以子类化,但我很好奇是否有其他的选择。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-04-01 23:53:39

子类化是最好的选择。

我会继承你的主要泛型类:

class BaseGeneric<T,U>

使用特定的类

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

这使得将您的逻辑放在一个地方(基类)变得很容易,但也很容易提供两个使用选项。根据类的不同,可能只需要很少的额外工作就可以实现这一点。

票数 82
EN

Stack Overflow用户

发布于 2015-12-02 10:23:08

您还可以像这样创建一个类重载

代码语言:javascript
复制
public class MyTemplate<T1, T2> {
    public T1 Prop1 { get; set; }
    public T2 Prop2 { get; set; }
}

public class MyTemplate<T1> : MyTemplate<T1, string>{}
票数 14
EN

Stack Overflow用户

发布于 2009-04-01 23:54:57

C#不支持这样的功能。

正如您所说,您可以子类化它(如果它不是密封的,并复制所有构造函数声明),但这是完全不同的事情。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/707780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档