gpt4 book ai didi

c# - 如果引用的对象被删除,引用变量会发生什么?

转载 作者:太空宇宙 更新时间:2023-11-03 11:45:52 26 4
gpt4 key购买 nike

假设我有以下类(class)......

Class1
{
private ArrayList myList;

private Class1
{
// Here fill myList with a bunch of Foo objects.
}

public ArrayList GetList()
{
return myList;
}
}

然后说在其他一些类中你有以下代码......

Class1 myClass = new Class1();
Foo myFavoriteFoo = myClass.GetList()[0] As Foo;

现在,myFavoriteFoo 实际上是对 Class1 中数组列表中存在的 Foo 的引用。如果 Class1 中的某些东西从类中删除了特定的 Foo 或将其处置,会发生什么? myFavoriteFoo 会立即 = null 吗?我猜想如果我尝试访问 Foo.SomeMethod() 我只会得到一个异常,例如“对象引用未设置为对象的实例”...

最佳答案

答案是它不可能发生。

dotNet 提供类型安全:一个引用总是指向一个有效的实例或者它是空的,没有其他选择。这就是为什么 dotNet 中没有手动内存管理(没有删除)的原因。

因此,如果您的代码在某处持有对某个对象的引用,那么该引用会阻止它进行垃圾回收。

而 Dispose() 是另一回事,它与对象占用的内存无关。 Dispose() 是对(非托管)资源的清理,通常对象会将其内部状态设置为 IsDisposed=true(“无效”)。

因此您可以关闭(== Dispose)一个 FileStream。然后您仍然拥有该对象,它只会在您尝试使用它时抛出。

关于c# - 如果引用的对象被删除,引用变量会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3467260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com