C #: отложенная загрузка, класс делегата, отражение - PullRequest
0 голосов
/ 25 мая 2011

У меня есть следующий сценарий:

interface IMyInterface { ... } 

Определяет общий интерфейс со свойствами, методами и т. Д.

class MyClass : ABaseClass, IMyInterface { ... } 

Реализует IMyInterface и является производным от базового класса.

class MyLazyLoadingClass : IMyInterface { ... } 

Возвращает некоторые предопределенные значения для некоторых методов / свойств и создает экземпляр MyClass через делегата при доступе к другим методам / свойствам. Он также определяет следующее преобразование:

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

Который создает экземпляр и возвращает его. (Примечание: я знаю, что неявное преобразование не должно включать такие операции, но из-за существующей конструкции системы я не нашел другого решения.)

В основном реализация работает. Моя проблема:

MyClass (или прокси-объект MyLazyLoadingClass) проверяется с помощью отражения для определения / получения / установки свойств / пользовательских атрибутов. Поскольку MyLazyLoadingClass не является производным от ABaseClass, он не содержит те же свойства / методы / пользовательские / атрибуты.

Есть ли способ сообщить Reflection, что он должен использовать экземпляр MyClass при проверке MyLazyLoadingClass? или возможно ли «заменить» экземпляр MyLazyLoadingClass на загруженный экземпляр MyClass? (Я так не думаю).

1 Ответ

1 голос
/ 25 мая 2011

Нет, я не думаю, что вы можете сделать это.

Но вы можете вместо этого создать MyLazyLoadingClass во время выполнения, сделав так, чтобы он "наследовал" от ABaseClass путем добавления к нему методов и т. Д.

...