![](/img/trans.png)
[英]Can I call a static method that lives on a base class with a reference the the class implementing that base class (in C#)?
[英]Can a C# base class call a sub class's constructor in a static member?
我有一個抽象的泛型類“BaseClass”和一個定義如下的類“SubClass”:
public class SubClass : BaseClass<SubClass>
我想在基類中定義一個靜態方法,簽名如下:
public static T GetSub()
然后在子類上調用它,以便它返回子類的實例
SubClass sub = SubClass.GetSub();
GetSub必須調用SubClass的默認構造函數,然后返回實例。
這開始看起來有點瘋狂,但我至少很想知道這是否可行。 對於C#更復雜的OOP功能,我是一個新手,所以我真的只是在黑暗中拍攝。
這可以使這項工作成功,但這需要你做一些工作。 最簡單的方法是使這項工作是在BaseClass
的聲明中賦予T
new
約束
abstract class BaseClass<T> where T : new() {
public static T GetSub() {
return new T();
}
}
另一種方法是使用Activator.CreateInstance
abstract class BaseClass<T> {
public static T GetSub() {
return Activator.CreateInstance<T>();
}
}
功能上雖然這與原始方法沒有什么不同。 CreateInstance<T>
方法將只查找無參數構造函數並調用它。 事實上, new T()
調用通常會編譯為Activator.CreateInstance<T>
調用。
這不行。 您必須在基類中創建一個虛方法,在每個子類中重寫並使其返回該子類的實例。
或者,您可以使用反射調用GetType()並使用Activator創建相應類型的實例。 通過這種方式,您只需要基類中的一個方法,但速度效率較低。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.