在自身内将对象设置为null

Axi*_*xis 1 c#

只是想知道这是否是从内部终止对象的可接受方式?以来

this = null;
Run Code Online (Sandbox Code Playgroud)

不可能.我通常只设置一个名为dispos或something的bo​​ol,如果在终止后访问该对象则抛出异常.但后来这发生在我身上,我认为它可能是一个更清洁的解决方案,但它似乎有点hacky所以我想要第二个意见.我应该坚持设置一个布尔或与此一起去.这也可以让垃圾收集器清理我的对象.

public class A
{
    public A()
    {

    }

    public void Method()
    {
        try
        {
            //Do Something.
        }
        catch
        {
            //If it fails destroy the object
            Destroy(this);
        }
    }

    private static void Destroy(A a)
    {
        a = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ed *_* S. 7

a是参考的副本.将它设置为null您喜欢的所有内容,它不会影响原始引用.当然,你现在可以改变方法签名来获取它的参数ref,但是你为什么要这样做呢?我无法想象你想在这里解决什么问题.

这也可以让垃圾收集器清理我的对象.

GC不需要你设置引用null,你没有用这个想法完成任何事情.你正在抄袭参考文献的副本; 该对象仍然在内存中,并且GC足够智能,无论其当前值是否有效,都可以知道给定引用是否有效null.

有关详细信息,请参阅此SO主题.