我正在編寫具有封裝特定於每個特定子類的對象的超類的代碼,例如下面是子類型與它封裝的類的類型的示例關係。所有的封裝類也都隱式強制轉換爲它們封裝的類。 (非抽象的)。使用泛型將類型信息傳遞給超類
Item => Model.Item
Box => Model.Box
而不是使用非安全型型object
我覺得我可以使用泛型來獲得類型安全和優雅。
public abstract class Entity<T> where T: class
{
protected T DataObject;
}
public class Item : Entity<Model.Item>
{
// Can use this.DataObject and it is type Model.Item
}
public class Box : Entity<Model.Box>
{
// Can use this.DataObject and it is type Model.Box
}
這種方式工作得很好,直到我想開始做第二層的子類,所以我改變的Item
的定義(注意Model.AItem
延伸Model.Item
)
public class Item<T> : Entity<T> where T : Model.Item
{
// Can use this.DataObject and it is type Model.Item
}
public class AItem : Item<Model.AItem>
{
// Can use this.DataObject and it is type Model.AItem
}
這對我的兩個主要問題,一個當我想引用一個二級對象作爲抽象類時,我必須將其放在那個Item<Model.Item>
我希望有一種方法可以隱含這種方式,因爲永遠不會出現這種情況。而且它對我的抽象類的隱式轉換造成嚴重破壞,因爲它們不能被實例化。
沒有什麼不行,基本上我想刪除遺傳參數,同時仍然保持具有特定類型的封裝對象的能力。封裝的對象實際上是一個Linq to SQL對象,並且周圍的對象正在形成一種緩衝區,用於更改以及實現其他功能,並提供數據的更直接表示,就像它在應用程序中一樣。我需要保留LinqToSql實體,這樣我就可以繼續使用LinqToSql更新更改並管理插入/刪除操作,而無需重新發明輪子。我使用的是部分類來完成這個任務,但是與屬於不同數據上下文的對象混淆的太多了。
編輯:全文
我有一個是由不同類型的調查對象的調查評估。一些調查對象,如實際問題對象,由不同的其他對象組成。例如,一個塊是一個調查對象,它有一個迭代庫,項目庫由可以是許多不同類型的項目(當前表示爲子類)組成。到目前爲止,我一直使用Linq to SQL作爲我的模型,並通過部分類進行一些更改。項目的腳本在調查中調用項目之前和之後執行。這個腳本可以改變項目的某些屬性,但是由於我的linq類是我的模型,只要我通過linq的特性對它們進行更改,它就會將這些更改保存到數據庫中。
有沒有人看到更好的方式來做事情?
您能否澄清一下*究竟*不適合您? – 2012-08-06 19:26:42
基類使用子類的類型信息究竟是什麼? – 2012-08-06 19:29:22
查看更新後的問題 – secretformula 2012-08-06 19:32:26