[英]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.