如何使用自定义属性为 C# 自动属性指定默认值?
如何使用自定义属性为 C# 自动属性指定默认值?
这是我想看到的代码:
class Person
{
[MyDefault("William")]
public string Name { get; set; }
}
我知道没有内置方法可以使用属性初始化默认值 - 我可以编写自己的自定义类来使用自定义属性来初始化默认值吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您想使用 PostSharp 来完成此操作(如您的标签所示),请使用延迟加载方面。您可以看到我在这里构建的http://programmersunlimited.wordpress.com/2011/03/23/postsharp-weaving-community-vs-professional-reasons-to-get-a-professional-license/
方面,您可以将默认值应用于单个属性,或在类级别使用单个声明将其应用于多个属性。
延迟加载方面将使用 LocationInterceptionAspect 基类。
然后像这样应用方面
If you want to do it with PostSharp (as your tags suggest) then use a Lazy Loading aspect. You can see the one I built here http://programmersunlimited.wordpress.com/2011/03/23/postsharp-weaving-community-vs-professional-reasons-to-get-a-professional-license/
With an aspect you can apply default value to a single property or apply it to multiple properties with a single declaration at the class level.
Lazy loading aspect will use LocationInterceptionAspect base class.
then apply the aspect like so
您可以使用这样的帮助器类:
并在类的构造函数中调用
InitializeDefaultValues
。编辑:更新版本,它生成并缓存委托来进行初始化。这是为了避免每次为给定类型调用该方法时都使用反射。
You could use a helper class like that:
And call
InitializeDefaultValues
in the constructor of your class.EDIT: updated version, which generates and caches a delegate to do the initialization. This is to avoid using reflection every time the method is called for a given type.
如果要使用表达式进行推测,您可以初始化委托并缓存它们。与纯粹的反射相比,它将使代码更快。
If to speculate with Expressions you could make initializing delegates and cache them. It will make code much faster comparing with just pure reflection.
您可以创建这样的方法:
然后您可以使用调用此方法的工厂方法或直接从构造函数调用它。请注意,如果您以这种方式创建大量对象并且性能很重要,那么使用反射可能不是一个好主意。
You could create a method like this:
You can then either use a factory method that calls this method or call it directly from the constructor. Note that this usage of reflection is probably not a good idea if you create a lot of objects this way and performance is important.