在C++模板中,可以指定某个类型参数是默认值.即除非明确指定,否则它将使用类型T.
可以用C#完成或近似吗?
我正在寻找类似的东西:
public class MyTemplate{}
这样一个没有明确指定的类型的实例T2
:
MyTemplatet = new MyTemplate ();
基本上是:
MyTemplatet = new MyTemplate ();
最后,我正在研究一个案例,其中有一个相当广泛使用的模板,但我正在考虑使用其他类型参数进行扩展.我想,我可以继承,但我很好奇是否还有其他选择.
子类化是最佳选择.
我会继承你的主要泛型类:
class BaseGeneric
与特定的类
class MyGeneric
这使您可以轻松地将逻辑保存在一个位置(基类),但也很容易提供两种使用选项.根据班级的不同,实现这一目标可能需要额外的工作.
一种解决方案是子类化.我将使用的另一个是工厂方法(与var关键字结合使用).
public class MyTemplate{ public MyTemplate(..args..) { ... } // constructor } public static class MyTemplate{ public static MyTemplate Create (..args..) { return new MyTemplate (... params ...); } public static MyTemplate Create (...args...) { return new MyTemplate (... params ...); } } var val1 = MyTemplate.Create (); var val2 = MyTemplate.Create ();
在上面的例子中val2
是类型MyTemplate
而不是从中派生的类型.
类型class MyStringTemplate
与类型不同MyTemplate
.这可能会在某些情况下造成一些问题.例如,您可以不投的实例MyTemplate
来MyStringTemplate
.
你也可以像这样创建一个Overload类
public class MyTemplate{ public T1 Prop1 { get; set; } public T2 Prop2 { get; set; } } public class MyTemplate : MyTemplate {}
C#不支持这样的功能.
正如你所说,你可以将它子类化(如果它没有被密封,并复制所有构造函数声明),但这是完全不同的事情.