我已經定義了以下泛型類使用泛型和支持子類跟蹤實例
public class ManagedClass<T> where T : ManagedClass<T>
{
static ManagedClass()
{
Manager = new ObjectManager<T>();
}
public static ObjectManager<T> Manager { get; protected set; }
public ManagedClass()
{
Manager.Add((T)this);
}
}
這個想法是我可以像這樣使用它:
class Product : ManagedClass<Product> {}
現在我可以對第7個產品做點什麼:
Product.Manager.GetById(7).DoSomething();
問題來自如果我嘗試使用派生類:
class ExtendedProduct : Product {}
現在ExtendedProduct.Manager有一個'Products'列表,如果我想使用我添加的新功能ExtendedProduct(DoSomethingElse),我必須像這樣拋出我得到的對象:
((ExtendedProduct)ExtendedProduct.Manager.GetById(7)).DoSomethingElse();
這有點難看,而使用泛型的全部意義在於避免投射。我想我可以在派生類中添加一個靜態構造函數來設置Manager = new ObjectManager()並在派生類構造函數中添加一個新的Manager.addObject(this),但似乎應該有更好的方法來執行此操作仿製藥。有什麼建議?