这是一段代码
public class CartItemList
{
//internal list of items and the constructor that instantiates it
private List<CartItem> **cartItems**;
public CartItemList() {
cartItems = new List<CartItem>();
我想问一下,在CartItemList()构造函数实例化它之前是否可以启动 cartItems 列表构造函数?然后只使用CartItemList的默认构造函数?
像这样:
public class CartItemList
{
//internal list of items and the constructor that instantiates it
private List<CartItem> cartItems= new List<CartItem>();
public CartItemList()
答案 0 :(得分:2)
是的,class
(引用类型)可以有这样的字段初始值设定项。字段初始值设定项在实例构造函数之前运行。
如果(并且仅当)您自己不创作任何实例构造函数(并且该类不是静态的),C#编译器将为您创建一个。它将是public
(如果是protected
类,则为abstract
,并且将采用零参数。
如果要将字段分配给初始化程序和实例构造函数,则可以考虑将该字段标记为readonly
。您仍然可以Add
,Remove
,Clear
等List<>
,但实例将在构造函数退出后修复。
答案 1 :(得分:0)
是的,你可以按照你在代码中显示的方式执行此操作,它将在我相信的构造函数之前运行。
我会尽可能地说这应该是推荐的方式,因为有时人们会忘记在构造函数中初始化字段变量,但只有在情况需要时才会这样。