【发布时间】:2019-05-05 20:42:58
【问题描述】:
我有一个具有很多属性的 Cart 类:
public class Cart
{
public Customer Customer { get; set; }
public Products Products { get; set; }
public Payments Payments { get; set; }
public DateTime TimeOfArrival { get; set; }
//...and so on
}
每当我想实例化一个新的Cart 时,我都需要启动这些属性。其中一些是已知的(例如客户),另一些是未知的(例如产品和付款)。所以当我实例化一张新票时,这就是我最终做的事情:
Cart Cart = new Cart
{
// for know properties:
Customer = currentCustomer,
TimeOfArrival = DateTime.Now,
// for properties that are going to be filled later:
Products = new List<Product>(),
Payments = new List<Payment>(),
// ...and so on
};
这个解决方案显然有效,但在实例化时似乎非常庞大,而且在启动器中完成了很多工作,我认为这是一件坏事。
我这样做是对的还是在实例化时启动了很多属性不是一个好习惯?如果是这样,我应该怎么做?
提前致谢
【问题讨论】:
-
你没有做错什么,这不是很多..
-
本身没有错。事实上,为您的属性设置默认值是一个很好的做法。您可以使用 stackoverflow.com/questions/40730/… 缩短代码,这将消除初始化对象时重复代码行的需要
-
为什么 Cart 类不能实例化 ctor 中的那些对象?消除了消费者为了使任何事情正常工作而这样做的需要。
-
@Aldert @Steve 感谢您的快速回答,实际上还有一些其他属性我没有让您幸免,但我相信它不会有太大变化。问题是构造函数不允许我在构造函数中将
new List<Thing>()设置为默认参数值。
标签: c# oop constructor