3
我花了一些時間學習C#中的弱引用是如何工作的,而且我遇到了這種奇怪的行爲。奇怪的C#弱參考行爲
在下面的示例代碼中,第一個測試通過,第二個失敗。看起來你不能在構造之後但在創建一個弱引用之前修改對象的一個實例,而不能停止以預期方式工作的弱引用。
private class Simple
{
public Simple() { X = "Hello"; }
public string X { get; set; }
}
[Test]
public void CreatingWeakReferenceBeforeModifying()
{
var a = new Simple();
var aRef = new WeakReference(a);
a.X = "World"; // First modification to a after creating reference
a = null;
GC.Collect();
Assert.That(aRef.IsAlive, Is.False); // This assertion passes
}
[Test]
public void CreatingWeakReferenceAfterModifying()
{
var b = new Simple {X = "World"}; // First mod to b before creating ref
var bRef = new WeakReference(b);
b = null;
GC.Collect();
Assert.That(bRef.IsAlive, Is.False); // This assertion fails
}
我在這裏錯過了什麼嗎?
這會教我嘗試和簡化代碼:) – Scroog1