我已經確定了以下難以理解的行爲。將屬性從實例外部設置爲空
我假定您可以將對象A的屬性設置爲對象B,操作對象B並且將對對象A的屬性進行更改(因爲它是相同的對象)。我期待這個單元測試通過,但是在將B設置爲null時,它在最後一行失敗。爲什麼?
[TestMethod]
public void TestObject()
{
Child child = new Child();
var parent = new Parent(child);
child.Name = "John";
Assert.AreEqual(parent.Child.Name, "John");
child = null;
Assert.IsNull(parent.Child);
}
public class Child
{
public string Name { get; set; }
}
public class Parent
{
public Child Child { get; set; }
public Parent(Child kid)
{
Child = kid;
}
}
「崩潰」並沒有真正告訴我們任何事情。異常更有用。 – 2015-04-03 13:29:55
將'child'設置爲null只是設置局部變量'child'。 'parent.Child'仍然指向構造'parent'時分配給'child'的實例。 – 2015-04-03 13:31:13
的確兒童被設置爲空而不是parent.child。如果你將parent.child設置爲null,它將按照你的意圖工作。 – 2015-04-03 13:34:07