C# 如何使实例类需要方法调用?

C# 如何使实例类需要方法调用?,c#,C#,我有一个处理非托管代码的非静态类,我的类继承IDisposable,它要求类实现Dispose()方法。如何使这个require Dispose()在这个类的实例上被调用,而不仅仅是在类本身中实现 public class MyClass : IDisposable { //Some fields and methods public void Dispose() { //Code that frees unmanaged resourses }

我有一个处理非托管代码的非静态类,我的类继承IDisposable,它要求类实现Dispose()方法。如何使这个require Dispose()在这个类的实例上被调用,而不仅仅是在类本身中实现

public class MyClass : IDisposable
{
    //Some fields and methods

    public void Dispose()
    {
        //Code that frees unmanaged resourses
    }
}
在我的主要方法中:

public void main()
{
    var myClassInstance = new MyClass();

    //Some code that does stuff with myClassInstance

    //I forget here to call myClassInstance.Dispose();

}

我现在想得到一个警告例如:“您没有在myClassInstance上调用Dispose”。

将消息放在析构函数~MyClass中,并用[Debug]属性标记它。您将无法控制何时调用它,但当其中一个被垃圾收集时,您将收到消息

你说的“警告”是什么意思?编译器警告?@Blorgbeard我相信他们的意思是(我为其挑选了几份副本)你不能,真的。你如何确定你的班级何时需要被处置?你基本上是想预测实例何时超出范围。@MikeTheLiar,比这更糟糕。您需要预测对象的生存期何时结束,而不是变量何时超出范围。变量可能超出作用域,但对象仍在其他地方使用,或者同一变量用于多个一次性对象。@Servy我们当然可以分析程序本身,确定它何时终止,然后在对象未被处理时抛出错误?“您将无法控制何时调用它”因此,这实际上并不是对提问的回答,它可能不会回答问题,但我认为它满足了需求,至少在实际可行的范围内。所以,让我们看看OP(@gegs)在否决投票前说了些什么。@sjb sjb我同意,在阅读了副本和这里的评论之后,似乎不可能以我所要求的方式,至少不可能以推荐/非黑客方式。因此,我将标记此答案。感谢@gegs标记为答案。请注意,mem泄漏和资源泄漏的发生方式有很多种。例如,无法从长期对象的事件中取消订阅短期对象。虽然c#提供内存管理,但IDisposable是一份合同,规定由程序员而不是系统来管理资源的释放。因此,我建议使用析构函数检查Dispose只是一种调试技巧,而不是用于生产的工具。有些人声称应该经常检查析构函数中的Dispose,但我不喜欢这样。