DTOb наследуется от DTOa и, следовательно, «Должен» включать все свойства из DTOa
Это верно, но у вас также есть это:
public class a
{
protected DTOa _DTO = new DTOa();
...
}
public class b
{
protected DTOb _DTO = new DTOb();
...
}
То есть класс a
и b
работают с различными экземплярами класса "DTO".Фактически, ваш компилятор должен предупреждать вас о том, что _DTO
in b
"скрывает" поле _DTO
в a
.
Что вы хотите сделать, это убедиться, что оба классаобращаются к тому же экземпляру .Вы не можете переопределить поля, но вы можете переопределить методы, так что может подойти что-то вроде этого:
class A
{
private DTOa _dto = new DTOa();
protected virtual DTOa GetDTO()
{
return _dto;
}
public string FirstName
{
get { return GetDTO().FirstName; }
set { GetDTO().FirstName = value; }
}
...
}
class B : A
{
private DTOb _dto = new DTOb();
protected virtual DTOa GetDTO()
{
return _dto;
}
public string Email
{
get { return GetDTO().Email; }
set { GetDTO().Email = value; }
}
...
}
Если честно, я не совсем уверен, в чем преимущество этого объекта "DTO",но вышесказанное должно дать вам поведение, за которым вы следуете.