从 C# 泛型类型继承到非泛型类型时如何减少冗长?
How can I decrease verbosity when inheriting from C# generic types to non-generic types?
使用 C# 泛型(具体来说,class
es 的类型参数),是否可以在专门的 ("non-generic") 类型 (class
) 中引用指定的类型参数值那个 extends/inherits 通用的?在这种情况下,我将在继承(专用)类型中覆盖通用(继承)类型的 virtual
方法;我怀疑这对 question/answer 很重要,但如果不是,我不想限制这种情况。
我可能只是在寻找 C 所说的 typedef
;在 C# 中,我能想到的最接近的东西是 using
别名 (using Type = Some.Longer.Namespaced.Type;
)。这是一个带有 using
别名的示例,但即使这样仍然非常冗长,并且在例如更新时没有乐趣。 ConcreteType
的名称更改(或其他一些重构,其中 boundaries/encapsulations 逻辑移位,而不是逻辑本身):
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
和 constructor/destructor 也需要更新,以及类型 (class
) 名称是 binding/contract.
的一部分的任何其他相关方面
在 using
别名之外,语言 (C#) 不支持这种间接命名。
在构建 C# (.NET) 项目时使用预处理器并不常见,常见的替代方法是使用开发工具来加速此过程 "work." 考虑到类型的定义不需要驻留在单个源文件甚至单个程序集中,开发工具似乎是管理它的最佳方法。
感谢评论者的回复。
使用 C# 泛型(具体来说,class
es 的类型参数),是否可以在专门的 ("non-generic") 类型 (class
) 中引用指定的类型参数值那个 extends/inherits 通用的?在这种情况下,我将在继承(专用)类型中覆盖通用(继承)类型的 virtual
方法;我怀疑这对 question/answer 很重要,但如果不是,我不想限制这种情况。
我可能只是在寻找 C 所说的 typedef
;在 C# 中,我能想到的最接近的东西是 using
别名 (using Type = Some.Longer.Namespaced.Type;
)。这是一个带有 using
别名的示例,但即使这样仍然非常冗长,并且在例如更新时没有乐趣。 ConcreteType
的名称更改(或其他一些重构,其中 boundaries/encapsulations 逻辑移位,而不是逻辑本身):
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
和 constructor/destructor 也需要更新,以及类型 (class
) 名称是 binding/contract.
在 using
别名之外,语言 (C#) 不支持这种间接命名。
在构建 C# (.NET) 项目时使用预处理器并不常见,常见的替代方法是使用开发工具来加速此过程 "work." 考虑到类型的定义不需要驻留在单个源文件甚至单个程序集中,开发工具似乎是管理它的最佳方法。
感谢评论者的回复。