我知道编写自定义属性来装饰方法并在方法执行之前进行评估,但有没有办法对其进行修改,以便在方法执行后评估属性?< / p>
理论上(伪代码): 我是否滥用属性的概念?如果有技术原因这是不可能的,那是什么?public void MyMethod()
{
Console.WriteLine("Hello World");
}
[AttributeToExecuteAfter]
答案 0 :(得分:2)
我认为你是误解,是的。属性不是在运行方法之前或之后运行的代码。属性是附加到方法(或类等)的元数据。使用反射,可以编写代码来读取元数据。
这是我能想到的最好的例子:
我使用的业务对象框架具有DataPortal的概念。在n层环境中,DataPortal位于服务器上并执行业务对象的CRUD方法。 DataPortal的编写方式是,在调用我的任何CRUD方法之前,它首先查看该方法是否具有RunMeInATransaction
属性。如果是,则创建事务,运行方法然后提交事务。从概念上讲,它很像具有属性的方法;我的方法可以有RunMeInATransaction
属性。
答案 1 :(得分:1)
您是指.net MVC中的ActionFilters吗?
如果是,您可以通过扩展抽象ActionFilterAttribute类来覆盖OnActionExecuted方法。这些仅适用于mvc动作方法。
答案 2 :(得分:1)
使用PostSharp,您可以创建用于输入和退出修饰方法的自定义处理程序。
答案 3 :(得分:0)
正如Ken所说,属性只是附加到方法/属性/字段/类的元数据,对“标记”元素很有用,然后能够使用反射用代码识别它。
即,Linq2Sql中使用属性作为使用数据库表映射类的方法。
您的误解可能是因为C#编译器实际上使用了一些特殊属性来执行具体操作。但是,我们这些人类开发人员无法使用这种功能:)