我创建了一个对象,并将其分配给在单独的类中找到的两个变量。

如果在一个类中将变量设置为null,则它只会中断对该对象的引用,但由于另一个引用,该对象本身仍然存在。

如何将对象设置为null,以便两个引用都指向null?没有找到每个引用。

这是伪代码。这样做的想法是同时丢失ClassA(ref1)和ClassB(ref2)中的引用。

public class ClassA
{
    public ClassC ref1 = new ClassC ();

    static void Main(string[] args)
    {
        ref1 = null;
    }

}

public class ClassB
{
    public static ClassC ref2;

    public static AssignC (ClassC c)
    {
        ref2 = c;
    }

}

public class ClassC
{

    public ClassC ()
    {
        ClassB.AssignC (this);
    }

}

最佳答案

你不能

您无法接触到另一个类的内部结构(嗯,不是常规的方法。)这种形式的封装使.Net代码的调试更加容易。

您可以在类上编写一个将其所有成员设置为null的函数,也可以将其作为IDisposable的实现来实现。

如果没有对对象的引用,则垃圾收集器将回收内存,您将无法直接控制它。

您可以像这样重写您的示例。

public class A
{
    private C c = new C();

    static void Main(string[] args)
    {
        c.Dispose();
        c = null;
    }
}

public static class B
{
    private static C c;

    public static LastC
    {
        get
        {
            return c;
        }

        set
        {
           c = value;
        }
    }
}

public class C : IDisposable
{
    public C()
    {
        B.C = this;
    }

    public void Dispose()
    {
        if (B.LastC == this)
        {
            // LastC has not been set by another instance.
            B.LastC = null;
        }
    }
}

您会注意到,我已经通过 setter 访问了静态引用,以便其他类可以访问它。

关于c# - 将实例设置为null而不是引用它的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24055062/

10-14 16:40
查看更多