使用属性更改方法的返回值

本文关键字:方法 返回值 属性 | 更新日期: 2023-09-27 18:32:47

我想有一个这样的类(伪代码):

public MyClass
{
   private bool isValid;
   [CheckValid]
   public int DoSomething()
   {
      return 1;
   }
}

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

使用属性更改方法的返回值

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

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

public int DoSomething() {
    CheckValid(); // might throw an exception
    return 1;
}