C# 如何检查已释放的对象并在已释放的方法中抛出ObjectDisposedException

C# 如何检查已释放的对象并在已释放的方法中抛出ObjectDisposedException,c#,.net,design-patterns,objectdisposedexception,disposable,C#,.net,Design Patterns,Objectdisposedexception,Disposable,我有一个使用一次性模式实现IDisPoalBe接口的一次性类。为了维护约束,我需要确保当对象被释放时,对任何公共方法的任何后续调用都会抛出ObjectDisposedException。显而易见的解决方案是检查bool值isDisposed并抛出异常。但我如何使用一些基于反射的解决方案(如果有的话或其他方法)来自动将此约束应用于每个公共方法。我不想做的是在我拥有的每个方法中执行此检查(即在每次调用之前,我不想调用IsObjectDisposed()方法) 除了我前面描述的实际应用程序之外,我还需

我有一个使用一次性模式实现IDisPoalBe接口的一次性类。为了维护约束,我需要确保当对象被释放时,对任何公共方法的任何后续调用都会抛出ObjectDisposedException。显而易见的解决方案是检查bool值isDisposed并抛出异常。但我如何使用一些基于反射的解决方案(如果有的话或其他方法)来自动将此约束应用于每个公共方法。我不想做的是在我拥有的每个方法中执行此检查(即在每次调用之前,我不想调用IsObjectDisposed()方法)


除了我前面描述的实际应用程序之外,我还需要知道一种自动调用方法的方法,比如说,每次调用一个类的方法时都调用Foo(),比如说MyClass,您是否考虑过在使用代码之前只执行空检查

即如果(空!=对象) { 做手术 }


或者您正在寻找某种对象包装,而不是使用virtual关键字?ie使用unity或spring等方面。这些允许您将依赖项注入到应用程序中,并允许您通过代码库(即安全性、日志记录、打印和边界检查)应用“交叉关注点”。

Imo,这里有两种解决方案:

  • 或者手动调用它们,以便对每个
    public
    方法执行检查

  • 或者可以使用将函数调用注入到由某个属性标记的每个方法的开头


那么如何做到这一点呢。我想我必须添加并创建一个属性?@Sriwantha:首先读一篇文章,看看它是如何工作的。你可以用方面做很多很酷的事情。另一方面,代码是在成功编译后生成的,因此二进制代码与您在编辑器中实际拥有的代码不同。我同意您所说的。我已经将方面用于几个缓存实现和线程优先级划分。但这是一个特例,我需要在每个方法前应用这个特性,而不需要用属性修饰每个方法。有没有一种方法可以在某个地方(可能是类属性)定义一个方面,在这里我可以定义这个约束,这样任何添加新方法的人都不必担心应用那个属性(方面)@Sriwantha:看看例子,有很多例子,例如自动日志记录。这基本上是在每个方法中注入日志方法调用。在没有属性的情况下也应该可以(但不是很确定)实现这一点。