[英]c# How to return a class that specify a generic class in factory method
[英]Abstract Class — How to specify return of generic list
我對此有些困難。 我有一個抽象類,我想為其繼承者添加一個公共抽象方法。 面臨的挑戰是該方法應返回實現完全不同的抽象類(NotifyingDatabaseObject)的類的通用列表。
我想執行以下操作,但無法編譯:
public abstract IList<T> GetList(int? id) where T : NotifyingDatabaseObject;
而且,當然,如果我將“ T”替換為“ NotifyingDatabaseObject”,它將要求繼承的類返回該抽象類,而不是具體的抽象類。
關於如何實現此目標的任何方向?
謝謝!
如果返回的類型與抽象類或具體類無關,則可以在方法上使用類型參數,例如:
public abstract IList<T> GetList<T>(int? id) where T : NotifyingDatabaseObject;
具體的類如下所示:
class MyConcreteClass : MyAbstractClass
{
public override IList<NotifyingDatabaseObjectChildClass> GetList<NotifyingDatabaseObjectChild>(int? id)
{
return new List<NotifyingDatabaseObjectChildClass>();
}
}
我假設您希望基類的每個子類都返回NotifyingDatabaseObject
的特定子類型。 在這種情況下,您應該在基類中添加一個類型參數,並讓每個子類型指定它們返回的NotifyingDatabaseObject
子類型:
public abstract class MyAbstractClass<T>
where T : NotifyingDatabaseObject
{
public abstract IList<T> GetList(int? id) ;
}
public class MyConcreteClass : MyAbstractClass<NotifyingDatabaseObjectChildClass>
{
public override IList<NotifyingDatabaseObjectChildClass> GetList(int? id)
{
return new List<NotifyingDatabaseObjectChildClass>();
}
}
請注意,現有答案不會這樣做-它要求每個子類型都支持返回NotifyingDatabaseObject
的任何子類型的列表,而不僅僅是返回一個子列表。 在這種情況下,唯一可能的實現是返回一個空列表(或為null,或者引發異常,或者無限循環),因為實現類沒有構造T
類型值的通用方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.