2010-05-21 1 views
3

Поэтому в основном я этоC# Инициализировать Подкласс на основе родительского объекта

public class Ticket{ 
    public TicketNumber {get; set;} 
    ..a bunch more properties... 
} 

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

public class TicketViewModel(Ticket ticket){ 
    //set each property from value of Ticket passed in 
    this.TicketNumber = ticket.TicketNumber; 
    ...a bunch more lines of code.. 

    //additional VM properties 
    public SelectList TicketTypes {get; private set;} 
} 

Как создать экземпляр свойства без необходимости писать все линии, как этот

this.TicketNumber = ticket.TicketNumber; 

Есть ли какой-то ярлык? Что-то вроде конструктора подкласса?

this = ticket; 

Очевидно, что это не работает, но это их каким-то образом, так что я не должен изменить свой подкласс, если addng/удаление свойство родительского класса? Или что-то?

ответ

0

Извините, нет ярлыка.

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

+0

не Может быть сделано с отражением? Я не использую объект Type достаточно, чтобы макетировать рабочий код прямо сейчас, но если вы просто сопоставили имена и типы свойств, я бы предположил, что вы можете сделать что-то подобное. Однако я бы не стал с этим справляться. Еа. –

4

Посмотрите Automapper

+0

+1: Та! ... Я работал над своим собственным объектом-картографом. Не знал, что кто-то еще уже сделал один ...: D! Круто! – Simon

0

Вы можете отметить копируемые в состоянии свойства с атрибутом и рефлекторно попытка присвоить их. Это не лучший способ сделать это.

2

Вы можете создать конструктор на своем базовый класс, а затем вызвать, что от наследодателя, как это:

public class Ticket{ 
    public string TicketNumber {get; set;} 
    ..a bunch more properties... 

    public Ticket (string ticketNumber, a bunch more values) { 
     this.TicketNumber = ticketNumber; 
     // a bunch more setters 
    } 
} 

Тогда в классе наследуемого просто сделать:

public class TicketViewModel : Ticket { 
    public string SomeOtherProperty { get; set; } 

    public TicketViewModel(string ticketNumber, ..., string someOtherProperty) 
      : base(ticketNumber, ....) 
    { 
      this.SomeOtherProperty = someOtherProperty; 
    } 
}