从C#泛型类型继承到非泛型类型时,如何减少详细程度?

时间:2016-10-14 22:31:56

标签: c# generics inheritance abstraction

使用C#泛型(特别是class es的类型参数),是否可以在专用("非泛型")类型中引用指定的类型参数值({{1扩展/继承泛型的?在这种情况下,我在继承(专用)类型中覆盖通用(继承)类型的class方法;我怀疑这个问题/答案很重要,但如果没有,我不想限制案件。

我可能正在寻找C调用virtual的内容;我在C#中最能想到的是typedef别名(using)。这是一个带有using Type = Some.Longer.Namespaced.Type;别名的示例,但即使这样仍然非常冗长,并且在更新时更新using的名称发生了变化(或其他一些重构,其中逻辑的边界/封装发生了变化,而不是逻辑本身):

ConcreteType

看起来像C风格的using ConcreteType = Some.Longer.Namespaced.Type; public class ConcreteTypeLogic : CrudLogic<ConcreteType> { // default ctor for `ConcreteTypeLogic` public ConcreteTypeLogic() { /* ... */ } // other ctor for `ConcreteTypeLogic` /* ... */ // dtor for `ConcreteTypeLogic` public ~ConcreteTypeLogic() { /* ... */ } // "Create" implementation for `ConcreteType` public override ConcreteType Create(ConcreteType value) { /* ... */ } // "Read" implementation for `ConcreteType` public override ConcreteType Read(ConcreteTypeIdentifier valueId) { /* ... */ } /* ... */ } 或CPP风格的宏确实是我想要的,因为typedef和构造函数/析构函数也需要更新,以及任何类型(ConcreteTypeLogic)名称是绑定/合同的一部分的其他相关方面。

1 个答案:

答案 0 :(得分:0)

using别名之外,语言(C#)不支持此命名间接。

在构建C#(.NET)项目时使用预处理器并不常见,常见的替代方法是使用开发工具来加速这项“工作”。考虑到类型的定义不需要驻留在单个源文件中,甚至不需要驻留在单个程序集中,开发工具似乎是管理它的最佳方法。

感谢评论者的回复。