我想要一个像这样的类(伪代码):
public MyClass
{
private bool isValid;
[CheckValid]
public int DoSomething()
{
return 1;
}
}
现在,我希望我的[CheckValid]
属性检查isValid
属性,如果是,则允许DoSomething()
执行,或者如果为false,则生成{{1返回DoSomething()
(或至少使default(int)
内的代码无法访问)
答案 0 :(得分:4)
这不是C#的一个特性:属性不是执行。但是,像PostSharp这样的扩展框架 允许这样做 - 基本上它会重写IL级别的代码以注入功能,通常基于属性。但这需要额外的工具。
在C#“开箱即用”中,你最好的选择是:
public int DoSomething() {
CheckValid(); // might throw an exception
return 1;
}