我已经读过,有充分的理由在SO上使用属性而不是c#中的字段 . 所以现在我想将我的代码从使用字段转换为使用属性 .
对于类的实例字段,我可以设置默认值 . 例如:
int speed = 100;
对于等效的属性,我认为是:
int Speed { get; set; }
我的理解是,在实例化类时,Speed属性将初始化为零 . 我一直无法找到如何设置默认值来轻松更新我的代码 . 有没有一种优雅的方法来为属性提供默认值?
似乎应该有一种优雅的方式来做到这一点,而不使用构造函数,但我只是无法找到如何 .
5 回答
CciSharp支持DefaultValue attribute,它允许在自动属性上放置默认值 . 然而,CciSharp是否有资格作为"elegant"解决方案是一个意见问题(它充当编辑二进制文件中的IL的后编译器) .
您必须在构造函数中设置属性的默认值 . 除此之外没有其他方法可以用于自动属性,因为自动道具的字段在编译时声明并在getter / setter中替换 . 但是在显式属性中,您可以初始化属性用于读取或写入的字段,如Joe在其答案中所述 .
最好的办法是做一个正常的老式现场支持的 property ,如:
我使用的设计模式,在整个Microsoft的Windows.Forms控件和其他.NET类中使用 . 而且,根据我的理解,构造函数外部的初始化允许实时编译器优化类代码 .
构造函数是设置auto属性初始值的唯一方法 .