所以基本上我有这个
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 :(得分:5)
答案 1 :(得分: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;
}
}
答案 2 :(得分:0)
抱歉,没有捷径。
我经常希望有。我很久以前开始使用COBOL进行编程,它有一个MOVE CORRESPONDING
语句,用于将同名的成员从一个记录移动到另一个记录。我从那以后就用我所使用的每种语言都希望如此。
答案 3 :(得分:0)
您可以使用属性标记可复制属性,并反射性地尝试分配它们。这不是最佳方式。