Как сопоставить наследование со свойством, возвращенным другим наследством? - PullRequest
0 голосов
/ 10 июня 2010

У меня есть абстрактный класс Vehicle и два класса, производных от: Car и ForkLift.

public abstract class Vehicle
{
    public EngineBase Engine { get; set; } 
}

public class Car : Vehicle
{
    public GasEngine Engine { get; set; }
}

public class ForkLift : Vehicle
{
    public ElectricEngine Engine { get; set; }
}

и двигатель clases:

public abstract class EngineBase
{
}

public class GasEngine : EngineBase
{
}

public class ElectricEngine : EngineBase
{
}

Двигатели отображаются с "таблицей в иерархии классов". С Транспортными средствами я хочу использовать тот же шаблон.

Как отобразить класс Engine и получить его с помощью этого свойства Engine?

Как это сделать с ленивой загрузкой?

Ответы [ 2 ]

0 голосов
/ 10 июня 2010

Используйте защищенное поле в Vehicle и сопоставьте его со стратегией доступа:

public abstract class Vehicle
{
    protected Engine _engine;
}

В Fluent NHibernate это будет отображено:

References(x => x.Engine, "EngineId").Access.CamelCaseField(Prefix.Underscore);

Тогда классы, которые расширяют Vehicle, могутразыграйте по мере необходимости:

public class Car : Vehicle
{
    public GasEngine
    {
        get { return (GasEngine)_engine; }
        set { _engine = Value; }
    }
}
0 голосов
/ 10 июня 2010

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

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