На этих занятиях
[ActiveRecord]
public class BaseMoo : ActiveRecordBase
[ActiveRecord]
public class Foo : BaseMoo { }
где-то в коде, который я делаю
var fooObj = new Foo();
// do something with fooObj
BaseMoo obj = fooObj;
здесь я пытаюсь разыграть
var newFooObj = (Foo)obj; // and goes well
если я изменю классы на это:
[ActiveRecord(Lazy=true)]
public class BaseMoo : ActiveRecordBase
[ActiveRecord(Lazy=true)]
public class Foo : BaseMoo { }
делает его Lazyest в этих строках:
var fooObj = new Foo();
// do something with fooObj
BaseMoo obj = fooObj;
AR создает не экземпляр Foo, а объект BaseMooProxy
var newFooObj = (Foo)obj; // this throws an invalidcast exception
Как предложено @Adam Houldsworth в этот вопрос
Я перегружаю явный оператор Foo таким образом
public static explicit operator Foo(NHibernate.Proxy.INHibernateProxy nhProxy)
{
var resultObj = (Foo)nhProxy.InSomeWayIGetTheOriginalObject(); // InSomeWayIGetTheOriginalObject() is not a real method, only for simplify
return resultObj;
}
но я получаю ошибку в параметре перегрузки оператора
NHibernate.Proxy.INHibernateProxy nhProxy
user-defined conversion from interface
ВОПРОС:
как мне сделать явное преобразование из BaseMooProxy (NHibernate.Proxy.INHibernateProxy) в Foo?
Поскольку известно, что невозможно перегрузить оператор "is", есть ли способ выполнить работу "obj is Foo"?
Поскольку пользовательское приложение является клиентом 3-й части, невозможно изменить способ, которым приложение преобразует объекты классов.
заранее спасибо.