C # инициализировать подкласс на основе родительского объекта - PullRequest
3 голосов
/ 21 мая 2010

Так что в основном у меня есть это

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; 

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

Ответы [ 4 ]

5 голосов
/ 21 мая 2010

Посмотрите на Automapper

2 голосов
/ 21 мая 2010

Вы можете создать конструктор в своем базовом классе, а затем вызвать его из наследника, например:

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;
     }
}
0 голосов
/ 21 мая 2010

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

0 голосов
/ 21 мая 2010

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

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

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