繁体   English   中英

从 C# 泛型类型继承到非泛型类型时,如何减少冗长?

[英]How can I decrease verbosity when inheriting from C# generic types to non-generic types?

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

我可能只是在寻找 C 所称的typedef 我在 C# 中能想到的最接近的事情是using别名( using Type = Some.Longer.Namespaced.Type; )。 这是一个带有using别名的示例,但即使这样仍然非常冗长,并且在例如ConcreteType的名称更改(或其他一些重构,其中逻辑的边界/封装发生变化,而不是逻辑本身发生变化)时更新也没有乐趣:

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)
    { /* ... */ }

    /* ... */
}

似乎 C 风格的typedef或 CPP 风格的宏确实是我想要的,因为ConcreteTypeLogic和构造函数/析构函数也需要更新,以及类型( class )名称的任何其他相关方面绑定/合同的一部分。

除了using别名之外,语言 (C#) 不支持这种命名间接。

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

感谢评论者的回应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM