簡體   English   中英

可以將當前類的類型用作泛型類型參數的值嗎?

[英]Can the type of the current class be used as the value of a generic type parameter?

可以使用C#完成這樣的事情嗎?

public abstract class BaseClass
{
    public abstract IInterface<T> CreateEditor() where T: the_actual_type_of_this_instance;
}

用法示例:

var instance = new DerivedClass();
var editor = instance.CreateEditor(); // IInterface<DerivedClass>

不,你不能這樣做 - 部分是因為它在編譯時沒有意義。 考慮對您的代碼稍作修改:

BaseClass instance = new DerivedClass();
var editor = instance.CreateEditor();

編譯器可以推斷editor器的類型是什么? 它只知道BaseClass ,所以它必須返回一個IInterface<BaseClass> 根據IInterface<T> T是否是協變的,這可能對實際實現IInterface<DerivedClass>或它可能不是的東西有效。

您可能希望改為使用基類:

public abstract class BaseClass<T> where T : BaseClass<T>
{
    public abstract IInterface<T> CreateEditor();
}

public class DerivedClass : BaseClass<DerivedClass>
{
    ...
}

這有兩個問題:

  • 當你超過一個級別時,它不起作用; 如果您需要DerivedClass子類, DerivedClass您將DerivedClass問題
  • 它不會阻止對模式的惡意濫用,例如public class NastyClass : BaseClass<DerivedClass>

......但在很多情況下它很實用。

暫無
暫無

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

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