1. Есть цель разделить данные от логики (действий над этими данными)
2. Есть иерархия классов сущностей и иерархия классов с методами (логикой) для этих сущностей.
Сущности:
class EntityGen
{
//...
}
class Entity1 : EntityGen
{
//...
}
class EntityN : EntityGen
{
//...
}
Логика:
class LogicGen
{
// это родительская сущность для родительского класса логики
protected EntityGen Entity;
// Класс LogicGen создается один раз.
// Сюда только передается объект, над которым нужно произвести действия
public Initialize(EntityGen aEntity)
{
Entity = aEntity;
}
// Остальная логика для родительской сущности
// ....
}
class Logic1 : LogicGen
{
private Entity1 Entity; // это порожденная сущность для
// порожденного класса логики
// Вопрос:
// Как здесь переопределить переменную с тем же названием Entity,
// но уже типа Entity1
// Остальная логика для порожденной сущности
// ....
}
Вначале выполняется
Initialize() из
LogicGen
А потом уже вызываются конкретные методы из
Logic1
Как в классе
Logic1 переопределить переменную
Entity но уже типа
Entity1 ?
Чтобы не использовать вторую переменную, которая будет являться просто второй ссылкой на тот же объект.
Тут возможны варианты, для начала такой:
public abstract class LogicGenBase<T>
where T: EntityGen
{
protected T Entity{get;private set;}
public void initialize(T aEntity)
{
Entity = aEntity;
// Two Tea to two two
InternalInitialize();
}
protected abtrsact void InternalInitialize();
}
а так?
(так не будет два поля, хранящих данные)
class EntityGen
{
//...
}
class Entity1 : EntityGen
{
//...
}
class EntityN : EntityGen
{
//...
}
class LogicGen<T> where T: EntityGen
{
// это родительская сущность для родительского класса логики
private EntityGen _Entity; //можно прятать, а можешь сделать его protected, как угодно :)
protected T Entity
{
get
{
return (T)_Entity;
}
// можешь сделать метод set
}
// Класс LogicGen создается один раз.
// Сюда только передается объект, над которым нужно произвести действия
public void Initialize(EntityGen aEntity)
{
_Entity = aEntity;
}
// Остальная логика для родительской сущности
// ....
}
class LogicGen1 : LogicGen<Entity1>
{
// это родительская сущность для родительского класса логики
// Остальная логика для родительской сущности
// ....
}
Здравствуйте, AHgpeu, Вы писали:
AH>1. Есть цель разделить данные от логики (действий над этими данными)
AH>2. Есть иерархия классов сущностей и иерархия классов с методами (логикой) для этих сущностей.
А обычный визитор чем не угодил?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>