2011-05-25 88 views
0

我有以下情形:C#:延遲加載,委託類,反射

interface IMyInterface { ... } 

定義與屬性,方法等的通用接口。

class MyClass : ABaseClass, IMyInterface { ... } 

實現IMyInterface並從基類派生。

class MyLazyLoadingClass : IMyInterface { ... } 

返回某些方法/屬性的某些預定義值,並在訪問其他方法/屬性時通過委託創建MyClass的實例。它還定義了以下轉換:

implicit operator MyClass(MyLazyLoadingClass myLazyLoadingClass) { ... } 

它創建實例並將其返回。 (注:我知道一個隱式轉換不應該涉及這樣的操作,但由於現有系統設計,我沒有發現其他解決方案。)

基本上實現工作。我的問題:

通過反射檢查MyClass(或MyLazyLoadingClass代理對象)以確定/獲取/設置屬性/自定義屬性。由於MyLazyLoadingClass不是從ABaseClass派生的,因此它不包含相同的屬性/方法/自定義/屬性。

有沒有辦法告訴反射當MyLazyLoadingClass被檢查時它應該使用MyClass實例?或者是否有可能用已加載的MyClass實例「替換」MyLazyLoadingClass實例? (我真的不這麼認爲)。

回答

1

不,我認爲你不能這樣做。

但你可能要創建MyLazyLoadingClass在運行時相反,具有添加方法是等

+0

感謝您的答覆從ABaseClass爲「派生」。我這樣想,只是想確保...我通過向MyLazyLoadingClass添加接口並在使用反射時檢查該接口來解決問題。也許不是最好的解決方案,但它能完成這項工作。這將是很好的延遲基類初始化,直到未覆蓋的屬性被訪問... – Korexio 2011-05-25 10:16:23