C# 更改具有属性的方法的返回值
我想要一个这样的类(伪代码): 现在,我希望我的C# 更改具有属性的方法的返回值,c#,custom-attributes,C#,Custom Attributes,我想要一个这样的类(伪代码): 现在,我希望我的[CheckValid]属性检查是否有效属性,如果为真,则允许执行DoSomething(),如果为假,则使DoSomething()返回默认值(int)(或者至少使DoSomething()中的代码不可执行)这不是C#的一个特性:属性不会这样执行。然而,也有类似的扩展框架允许这样做——基本上它在IL级别重写代码以注入功能,通常基于属性。但这需要额外的工具 在C#“开箱即用”中,您最好的选择是: public int DoSomething() {
[CheckValid]
属性检查是否有效
属性,如果为真,则允许执行DoSomething()
,如果为假,则使DoSomething()
返回默认值(int)
(或者至少使DoSomething()
中的代码不可执行)这不是C#的一个特性:属性不会这样执行。然而,也有类似的扩展框架允许这样做——基本上它在IL级别重写代码以注入功能,通常基于属性。但这需要额外的工具
在C#“开箱即用”中,您最好的选择是:
public int DoSomething() {
CheckValid(); // might throw an exception
return 1;
}
只有在检查属性时(即通过反射)才会对其进行评估,因此我认为这是不可能的。您是否查看过策略注入?那么标准内置的
[Authorize]
属性是如何工作的?我想要相同的功能,但需要我自己的代码。@ojek这些功能可以工作,因为它们应用的框架(MVC等)通过反射显式地检查这些属性,并直接调用它们的代码。这不是一种语言功能。@ojek是一个人类示例:如果我在一个粘性标签上写下“请勿打开”,并将该标签粘贴到一个盒子上:这不会阻止任何人打开盒子。只有当一些人不厌其烦地寻找标签、阅读标签上的内容并遵循标签上的内容时,它才有用。在像MVC这样的框架中,是框架在选择代表您执行操作之前执行所有这些检查。
public int DoSomething() {
CheckValid(); // might throw an exception
return 1;
}