簡體   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