我已经阅读了通过属性设置默认属性的帖子,其中DefaultValue的末尾是设计模式或序列化。
但是,有没有办法编写一个属性来执行这些帖子所需的内容:将属性默认为某个值。
如果有办法 - 如何开始编写这样的属性?
谢谢, L -
答案 0 :(得分:3)
你基本上不能。
但是,您可以在构造函数中设置默认值。
碰巧我做了实现了最近这样做的东西,但那是使用基于工厂的构造;工厂检查[DefaultValue]
并通过反射设置值。但是,除非使用像PostSharp这样的重写器,否则属性不会导致任意代码执行。
如果构造函数太偏离您的喜好,则必须使用字段初始值设定项并在字段中写入get
/ set
。
答案 1 :(得分:0)
不幸的是,属性只是元数据,这意味着他们无法自行运行或做某事
但是,没有什么可以阻止您编写一个名为SetDefaultValues
的扩展方法,该方法从属性中读取默认值并将它们分配给属性。
我在最近的一个项目中做了类似的事情,事实证明这是一个很好的决定因为它将所有默认值都以声明式风格定义在一个地方。
有interesting article on CodeProject对不同的策略实施基于[DefaultValue]
的初始化并比较它们的性能。我建议你看一下。