这是正确的,假设你完整的代码是这样的:
// Person class.
public class Person {
// Automatic property.
public Cat Cat { get; set; }
}
// Cat class (not a struct!).
public class Cat {
// Automatic property.
public string Name { get; set; }
}
在这种情况下,访问myPerson.Cat
会给你一个直接引用该对象。你可以调用它的方法,访问它的属性,将它传递给接受Cat
参数的方法,无论你喜欢什么。
但是,在这种情况下,您无法确定myPerson.Cat
属性不是null
。任何代码都可以将其设置为Cat
或null
类型的任何对象。如果有东西将其设置为null
,并且您尝试访问myPerson.Cat.Name
,则会收到NullReferenceException
。
为了避免让这些例外情况,你应该总是验证属性不为null,通过像if (myPerson.Cat != null) { ... }
直接检查使用它之前。如果你知道肯定它不能是null
,并且没有任何东西可以违反这个假设,你可以跳过这一步。您可能需要考虑使用code contracts以确保在将来您更熟悉该语言。
你试过了会发生什么? – ChaosPandion 2010-08-07 03:44:26
这与XNA无关。如果可能,您应该删除该标签。 – Rich 2010-08-07 03:45:43
您的'NullReferenceException'可能发生是因为您的程序尚未为'Person.Cat'分配一个值。 – 2010-08-07 03:49:11