перегрузка явного оператора CAST пользовательским параметром интерфейса - PullRequest
2 голосов
/ 12 января 2012

На этих занятиях

[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

ВОПРОС:

  1. как мне сделать явное преобразование из BaseMooProxy (NHibernate.Proxy.INHibernateProxy) в Foo?

  2. Поскольку известно, что невозможно перегрузить оператор "is", есть ли способ выполнить работу "obj is Foo"?

Поскольку пользовательское приложение является клиентом 3-й части, невозможно изменить способ, которым приложение преобразует объекты классов.

заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...