我有一个在一个类中生成的对象
public class CreatingClass
{
public T CreateObject<T>(Dictionary<string, object> parameters) where T : IMyInterface, new()
{
....
}
public void DestroyObject(IMyInterface objectToDestroy)
{
....
}
}
Run Code Online (Sandbox Code Playgroud)
我从客户端类调用此函数,然后有时需要通过创建类通过我的应用程序使其无效.
我可以做以下事情
public class ClientClass
{
MyObject obj;
CreatingClass creatingClass = new CreatingClass();
private void AFunctionToCreateMyClass()
{
obj = creatingClass.CreateObject<MyClass>(parameters);
}
private void AFunctionToDeleteMyObject()
{
CreatingClass.DestroyObject(obj);
Assert.IsNull(obj);//Doesn't fail
}
}
Run Code Online (Sandbox Code Playgroud)
我曾尝试过objectToDestroy = null,但不认为它会起作用(而且它没有)
请注意,您实际上无法销毁对象; 你受垃圾收集规则的约束.按下,您可以检查IDisposable并调用Dispose(),
你可以使用ref提供的样本,但我不确定有多少意义; 用"obj = null;"清除字段更简单.
该ref用法可能会比较混乱,因为这工程对变量 -也就是说,如果你这样做:
var tmp = obj;
DestroyObject(ref tmp);
Run Code Online (Sandbox Code Playgroud)
那么obj仍然是原始价值.除非你有充分的理由,否则我不推荐这种ref方法.
你想要的是什么
public void DestroyClass(ref IMyInterface objectToDestroy)
{
....
objectToDestroy = null;
}
Run Code Online (Sandbox Code Playgroud)
这将把你的本地引用设置为null