Про наследование.
От: AHgpeu Украина  
Дата: 29.06.10 08:19
Оценка:
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 ?
Чтобы не использовать вторую переменную, которая будет являться просто второй ссылкой на тот же объект.
Re: Про наследование.
От: BluntBlind  
Дата: 29.06.10 08:36
Оценка: 3 (2) +1
Тут возможны варианты, для начала такой:

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();
}
Re: Про наследование.
От: shakm Россия  
Дата: 29.06.10 09:39
Оценка:
а так?
(так не будет два поля, хранящих данные)

        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>
        {
            // это родительская сущность для родительского класса логики

            // Остальная логика для родительской сущности
            // ....
        }
Re: Про наследование.
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.06.10 10:53
Оценка:
Здравствуйте, AHgpeu, Вы писали:

AH>1. Есть цель разделить данные от логики (действий над этими данными)

AH>2. Есть иерархия классов сущностей и иерархия классов с методами (логикой) для этих сущностей.

А обычный визитор чем не угодил?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.