我创建了一个对象,并将其分配给在单独的类中找到的两个变量。
如果在一个类中将变量设置为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/