初始化私有成员c#我有两个私有列表,需要在创建对象的时候初始化。第二个列表取决于第一个列表。我可以这样做吗:publicclassMyClass{privateListmyList=newList();privateReadOnlyCollectionmyReadOnlyList=myList.AsReadOnly;...}第二个列表是第一个列表的只读包装器。我可以期望c#每次运行时都按此顺序执行这两行吗?或者我应该把这个初始化放在构造函数中吗?编辑:抱歉这个愚蠢的问题。我试过了,编译器说:Error1Afieldinitializercannotreferencethenon-staticfield,method,orproperty...No.如果你想根据类中的个别变量初始化变量,你需要这样做在构造函数中:publicclassMyClass{privateListmyList=newList();私有ReadOnlyCollectionmyReadOnlyList;publicMyClass(){myReadOnlyList=myList.AsReadOnly;}}内联初始化器始终在静态上下文中运行,这意味着您无法访问类中的成员变量。但是,在构造函数内部,您可以这样做。内联初始化程序将在构造函数之前发生,这就是为什么我可以保留列表初始化的原因。我可以期望c#每次运行时都按此顺序执行这两行吗?是的,合法的实例变量初始值设定项(见下文)按照它们出现的顺序运行。我建议您参考规范的第10.11.2节:这对应于在进入构造函数之后和直接调用直接基类构造函数之前立即执行的赋值顺序。变量初始值设定项按照它们在类声明中出现的文本顺序执行。但是,字段初始值设定项不能像您那样引用非静态字段。您的代码无效。这是规范的第10.5.5.2节:实例字段的变量初始值设定项不能引用正在创建的实例。因此,在变量初始值设定项中引用它是编译时错误,因为变量初始值设定项通过简单名称引用任何实例成员都是编译时错误。关于你的第二个问题:或者我应该把这个初始化放在构造函数中吗?基于以上,你别无选择。至少myReadOnlyList的初始化必须放在构造函数中,因为它引用了实例字段myList。为清楚起见,我将两者都放在构造函数中。最后一点,关于另一个问题。即使以下是非法的:publicclassMyClass{privateListmyList;publicclassMyClassprivateReadOnlyCollectionmyReadOnlyList;publicMyClass(){myList=newList();myReadOnlyList=myList.AsReadOnly;这是因为您没有将MyClass声明为泛型类。将公共类MyClass替换为公共类MyClass。是的,您应该将myReadOnlyList的初始化放在构造函数中,但为了保持一致性,我的建议是将两者都放在构造函数中。以上就是C#学习教程:初始化私有成员c#分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
