2011-05-25 61 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