C#有没有理由不在Attribute类中放置功能?

时间:2015-06-23 11:01:06

标签: c# unity3d-editor

我正在编写一个标记方法的属性,以便它可以显示为单击时调用方法的按钮。

该属性应该被赋予方法的MethodInfo,并且它可以在屏幕上绘制并在单击时调用该方法。这样,这个班级很好,自成一体。

但我从未见过包含其实际功能的属性类。它们总是只是其他类使用的数据容器。

是否存在与属性类不同的功能的实际性能相关原因?

2 个答案:

答案 0 :(得分:1)

不,本身没有与性能相关的原因。更重要的是,属性是一种添加额外的声明性元数据以供反射使用的方法。

不在属性中添加太多功能的一个原因通常是它们只接受构造函数中的编译时常量,因此您不会获得构造函数依赖注入。这通常通过使用依赖项的方法注入来解决。

ASP.NET MVC为其AuthorizationFilterAttribute及其派生属性执行此操作。您可以使用"行为"来查看不同的属性。在ASP.NET的过滤器中测试网站here

答案 1 :(得分:1)

没有技术原因可以将代码放在属性类中。但是,有语义原因不能。

属性是元数据,即它们是声明性的。声明性信息说明需要什么,而不是如何实现。

另一方面,代码是程序信息;它描述了事情是如何发生的。

同样,虽然没有技术上的原因,你不能混合声明和程序信息,但它可以被视为不好的做法。原因在于混合这两者会使代码更难以阅读,更难以测试和更难维护。这些都不能保证会发生,但是为了避免这些问题,往往需要付出更多努力,而不是将两者分开。

事件(例如按钮单击)是声明性的,因此您使用属性进行事件处理的想法符合声明性模型。将事件处理程序代码放在不同的类中可能更明智。