Подскажите, как из родительского класса получить доступ к полям дочернего класса

Mixon

День добрый!Возможно ли из класса А получить доступ к полям класса B вот в таком случае:
public class A
{
public void _Save()
{
// как тут получить доступ к полю класса B.z???
}
}
public class B:A
{
public int z=123;
public void Save()
{
this._Save();
}
}
Задача написать класс для сохранения дочерних классов в базу\файл и тд и тп,нагромождать функционал в каждый дочерний класс не хотелось бы, сложнее сопровождать.Заранее спасибо.
12 ответов

Mixon

Mixon,делают полиморфизм.Т.е. в верхний класс в Save передают параметром стрим-поток для сохранения и сначала пишет верхний класс B, потом класс А и т.д. до последней матрёшки.


Mixon

Mixon,каждй класс пишет свои поля


Mixon

Mixon, это называется сериализация (Serialization). Гуглить до посинения по этим словам.... Хотя... может я не понял вас... тогда есть this.GetType и другие Reflection'ы позволяющие вам раздербанить тип :)P.S.: я бо не стал делать такого рода штуки в базовом классе...


Mixon

читайте про ключевые слова
  • abstract
  • virtualи модификаторы доступа
  • protected

  • Mixon

    Mixon,
    using System.Reflection;
    List<FieldInfo> Fields = item.GetType().GetFields().ToList();


    Mixon

    День добрый!Возможно ли из класса А получить доступ к полям класса B вот в таком случае:
    public class A
    {
    public void _Save()
    {
    // как тут получить доступ к полю класса B.z???
    }
    }
    public class B:A
    {
    public int z=123;
    public void Save()
    {
    this._Save();
    }
    }
    Задача написать класс для сохранения дочерних классов в базу\файл и тд и тп,нагромождать функционал в каждый дочерний класс не хотелось бы, сложнее сопровождать.Заранее спасибо.
    А если я сделаю class олпдрполдпр:B{}, как твой A может получить доступ его полям?


    Mixon

    День добрый!Возможно ли из класса А получить доступ к полям класса B вот в таком случае:
    public class A
    {
    public void _Save()
    {
    // как тут получить доступ к полю класса B.z???
    }
    }
    public class B:A
    {
    public int z=123;
    public void Save()
    {
    this._Save();
    }
    }
    Задача написать класс для сохранения дочерних классов в базу\файл и тд и тп,нагромождать функционал в каждый дочерний класс не хотелось бы, сложнее сопровождать.Заранее спасибо.
    1. С точки зрения ООП - никак. Есть рефлекшн и иже с ними, но это другое дело.2. Ну, допустим, сохранили, и что дальше? Что с этим потом делать?Есть атрибут Serializable, чем он Вам не угодил?


    Mixon

    Addx,+1


    Mixon

    День добрый!Возможно ли из класса А получить доступ к полям класса B вот в таком случае:
    public class A
    {
    public void _Save()
    {
    // как тут получить доступ к полю класса B.z???
    }
    }
    public class B:A
    {
    public int z=123;
    public void Save()
    {
    this._Save();
    }
    }
    Задача написать класс для сохранения дочерних классов в базу\файл и тд и тп,нагромождать функционал в каждый дочерний класс не хотелось бы, сложнее сопровождать.Заранее спасибо.
    А почему именно такая постановка задачи? Что за надобность получать доступ в родительском класс - не проще ли, чтобы каждый дочерний класс сохранял себя сам?


    Mixon

    Новопашин Владимир,День добрый, базовый класс реализует функционал вычисления контрольной суммы объекта, для простых наследников нет смысла каждый раз переписывать данный функционал, а для более сложных объектов расчет контрольной суммы переопределяется.ЗЫ я побывал внедрять функционал в каждый класс, это приводит к излишнему коду.


    Mixon

    Новопашин Владимир,День добрый, базовый класс реализует функционал вычисления контрольной суммы объекта, для простых наследников нет смысла каждый раз переписывать данный функционал, а для более сложных объектов расчет контрольной суммы переопределяется.ЗЫ я побывал внедрять функционал в каждый класс, это приводит к излишнему коду.
    Вопрос решил как было сказано выше, всем спасибо.


    Mixon

    Забит очередной костыль