присвоение базовой части производного класса - PullRequest
1 голос
/ 28 февраля 2012

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

Я создаю модели представления как производные классы от базового класса сущности, которая собирается редактироваться. Обычно это просто для добавления идентификаторов для свойств навигации, чтобы они могли быть возвращены 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 Ответ

2 голосов
/ 28 февраля 2012
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;
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...