C# 如何初始化虚拟自动属性?

C# 如何初始化虚拟自动属性?,c#,c#-3.0,C#,C# 3.0,有没有一种方法可以在不使用构造函数的情况下初始化虚拟自动属性? 或者我应该只创建一个私有字段吗?无论是否为虚拟字段,您都需要一个构造函数。或者它将具有其类型的默认值 因为在构造函数中调用虚拟成员是不好的 正确,你得小心一点。正常规则确实适用。为了安全起见,您应该设计属性,使其不需要初始化,或者只在类或属性被密封的派生构造函数中初始化 请注意,在很多情况下,自动属性几乎没有意义或毫无意义 在虚拟自动属性的情况下,我认为初始化部分会使这成为一个问题,并且会删除“自动”部分并创建一个备份字段 当然,

有没有一种方法可以在不使用构造函数的情况下初始化虚拟自动属性?
或者我应该只创建一个私有字段吗?

无论是否为虚拟字段,您都需要一个构造函数。或者它将具有其类型的默认值



因为在构造函数中调用虚拟成员是不好的


正确,你得小心一点。正常规则确实适用。为了安全起见,您应该设计属性,使其不需要初始化,或者只在类或属性被密封的派生构造函数中初始化

请注意,在很多情况下,自动属性几乎没有意义或毫无意义

在虚拟自动属性的情况下,我认为初始化部分会使这成为一个问题,并且会删除“自动”部分并创建一个备份字段


当然,由于基构造函数是在子构造函数之前调用的,如果基构造函数将属性初始化为错误的值,则子构造函数有机会在对象的构造是最终的之前纠正该错误。

我不理解问题中对虚拟的强调。如果不使用构造函数,也无法初始化非虚拟自动属性。因为在构造函数中调用虚拟成员调用是不好的:)是的,但假设派生类实现了更复杂的getter或setter,依赖于派生类的其他字段。这些其他字段将不会被初始化。同意,但这是从构造函数的观点来看,所有虚拟代码都会遇到的问题。对于记录,我认为创建支持字段是最实用的解决方案。