在c#中设置null引用

Iva*_*iro 3 c# pointers memory-management

我一直在寻找这个信息的时间.从来没有见过有人问这样的事情.我知道我们可以在不安全的代码中使用C#中的指针,但事实并非如此.问题是:

MyClass beta = new MyClass();
MyClass alpha = beta;
beta = null;
Run Code Online (Sandbox Code Playgroud)

我现在需要做的是将beta设置为null并且ALSO将alpha设置为null.假设我已经在函数中返回了alpha,所以我再也无法访问它了,所以,我怎样才能将它设置为null?在c ++中,如果beta和alpha是指针我可以释放beta指向的内存,但我不知道在c#中这样做的方法.

以更基本的方式,假设我必须将两个变量都设置为null,但我只能访问其中一个变量.


编辑

我确实看到了一些答案,无法解决我所做的问题......我试着再次解释.我正在创建一个做一些动作效果的类,并返回一个可用于暂停或停止此动作的实例.使用此类的程序员在使用 if(variable != null) 之前用于测试变量.我需要的是当动作超过他们所拥有的实例时变为null,所以他们知道它不再有用了.

这有什么办法吗?

Ser*_*rvy 9

您需要添加一个额外的间接层.为了把事情在C++来说,MyClass是一个指向一个对象,因此设置两个指针为空,你需要路过身边的指针,而不是为指针,这样就可以解决指针指向只是一个指针,设置为null ,这两个双指针将解决null.

在C#中添加额外的间接层通常意味着创建一个新类.

public class Wrapper<T>
{
    public T Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

利用这一点,我们可以alphabeta各自Wrapper<MyClass>的对象(确保它们都是相同的实例Wrapper),并同时影响"指针",你可以只设定ValueWrappernull.