Присвоение базовой части производного класса

Я ищу способ назначить базовую часть производного класса из переменной базового класса без необходимости явно назначать каждое присваиваемое свойство один за другим. Иными словами: начиная с переменной базового класса, я бы хотел получить переменную производного класса, которая имеет все назначаемые базовые свойства, не задумываясь о том, что они собой представляют, или редактировать код, если они изменение.

Я создаю модели представления как производные классы из базового класса Entity, который должен быть отредактирован. Обычно это просто добавить идентификаторы для свойств навигации, чтобы они могли быть возвращены POST. Например:

public class ThingEditView : Thing
{
 public int UsefulID { get; set; }
}

Он используется следующим образом:

var foo = new ThingEditView
{
 UsefulID = thisThing.Useful.ID,
 A = thisThing.A,
 B = thisThing.B,
 /* and potentially many more properties from the base class Thing */
};
return View(foo);

Но я столкнулся с трудностями, когда добавляю свойства базовому классу Thing и забываю редактировать все места, где я инициализирую ThingEditView или ThingDetailView и т.д. Я бы с удовольствием мог сказать

var foo = new ThingEditView
{
 base = thisThing,
 UsefulID = thisThing.Useful.ID
};

и пусть компилятор определит, какие поля назначать. Есть ли способ сделать это?

Спасибо за понимание!

1 ответ

void Main()
{ 
 var thisThing= new ThingEditView {UsefulID = 1, A = 2, B = 3};
 var foo = new ThingEditView(thisThing);

 //foo.Dump();
}

// Define other methods and classes here
public class Thing
{
 public int A {get; set;}
 public int B {get; set;} 
 public Thing() {}
 public Thing(Thing thing)
 { 
 this.A = thing.A;
 this.B = thing.B;
 }
}

public class ThingEditView : Thing
{
 public int UsefulID {get; set;}
 public ThingEditView() {}
 public ThingEditView(Thing thing) : base(thing) {

 }
 public ThingEditView(ThingEditView view) : base(view) {
 this.UsefulID = view.UsefulID;
 }
}

Я бы выбрал автомат.

licensed under cc by-sa 3.0 with attribution.