3

我想要这样的课程(伪代码):

public MyClass
{
   private bool isValid;

   [CheckValid]
   public int DoSomething()
   {
      return 1;
   }
}

现在,我希望我的[CheckValid]属性检查isValid属性,如果为真,则允许DoSomething()执行,或者,如果为假,则DoSomething()返回default(int)(或至少使里面的代码无法访问DoSomething()

4

1 回答 1

4

这不是 C# 的特性:属性不是这样执行的。然而,像PostSharp这样扩展框架允许这样做——基本上它在 IL 级别重写代码以注入功能,通常基于属性。但这需要额外的工具。

在“开箱即用”的 C# 中,您最好的选择是:

public int DoSomething() {
    CheckValid(); // might throw an exception
    return 1;
}
于 2013-09-24T16:10:02.417 回答