簡體   English   中英

將泛型new()約束嵌入到接口/類中?

[英]Embed generic new() constraint into interface/class?

到目前為止,我一直在像這樣添加new()約束。

public T Request<T>(BaseRequest request)
        where T : BaseResponse, new()

有沒有一種方法可以將new()烘焙到BaseResponse所以我只需要指定

        where T : BaseResponse

不能。派生類始終可以具有私有/受保護的構造函數,並且無法防止這種情況。 它甚至可能是一個抽象類。

唯一的例外是struct ,它始終具有默認構造函數-您通過default(SomeStruct)獲得的構造函數。 不用說,這只是意味着該結構體將用零初始化(盡管C#6使此過程更加復雜)。

如果您的類中有幾個通用方法,那么您可以省去某些類型的輸入的唯一方法是改為使該類具有通用性,即從此開始:

class YourClass
{
    public static T Request<T>(BaseRequest request)
       where T : BaseResponse, new()
    { }

    public static T SomethingElse<T>(BaseRequest request)
       where T : BaseResponse, new()
    { }
}

對此:

class YourClass<T> where T : BaseResponse, new()
{
    public static T Request(BaseRequest request)
    { }

    public static T SomethingElse(BaseRequest request)
    { }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM