理解Has A关系实现C#
understanding Has A relationship implementation C#
我的观点是,aPerson.PhoneNumber.Number
是一个字符串,所以应该取字符串类型的值。
同样,在代码中,aPerson.PhoneNumber = phoneNumber
aPerson.PhoneNumber
和 phoneNumber
都是 PersonPhoneNumber
类型的对象。
行之后实际发生了什么变化
aPerson.PhoneNumber.Number = "Test Phone";
成功了吗?
谁能告诉我为什么这两行在编译时显示错误?
class PersonPhoneNumber
{
public string Number { get; set; }
}
class Person
{
public string Name { get; set; }
public PersonPhoneNumber PhoneNumber { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person aPerson = new Person();
aPerson.Name = "Test Name";
aPerson.PhoneNumber.Number = "Test Phone";//Error: System.NullReferenceException : Object reference not set to an instance of an object.
PersonPhoneNumber phoneNumber = new PersonPhoneNumber();
aPerson.PhoneNumber.Number = "Test Phone";//Error: System.NullReferenceException : Object reference not set to an instance of an object.
aPerson.PhoneNumber = phoneNumber;
aPerson.PhoneNumber.Number = "Test Phone"; // This does not show any error
Console.WriteLine(aPerson.Name);
Console.WriteLine(aPerson.PhoneNumber.Number);
}
首先,我认为您的意思不是编译期间的错误,而是运行时的错误。
您的问题是 aPerson.PhoneNumber 在前 2 次尝试设置 Number 属性 时为空。直到你设置 aPerson.PhoneNumber = phoneNumber
它才不再为空。所以错误很明显。
如果您希望 aPerson.PhoneNumber.Number = "Test Phone";
像代码中所示那样工作,您必须先初始化 aPerson.PhoneNumber
。
这通常在 Person
class:
的构造函数中完成
public class Person
{
public Person()
{
this.PhoneNumber = new PersonPhoneNumber();
}
public string Name { get; set; }
public PersonPhoneNumber PhoneNumber { get; set; }
}
免责声明:这只会解决您遇到的错误 - 通常这不是好的做法。
我的观点是,aPerson.PhoneNumber.Number
是一个字符串,所以应该取字符串类型的值。
同样,在代码中,aPerson.PhoneNumber = phoneNumber
aPerson.PhoneNumber
和 phoneNumber
都是 PersonPhoneNumber
类型的对象。
aPerson.PhoneNumber.Number = "Test Phone";
成功了吗?
谁能告诉我为什么这两行在编译时显示错误?
class PersonPhoneNumber
{
public string Number { get; set; }
}
class Person
{
public string Name { get; set; }
public PersonPhoneNumber PhoneNumber { get; set; }
}
class Program
{
static void Main(string[] args)
{
Person aPerson = new Person();
aPerson.Name = "Test Name";
aPerson.PhoneNumber.Number = "Test Phone";//Error: System.NullReferenceException : Object reference not set to an instance of an object.
PersonPhoneNumber phoneNumber = new PersonPhoneNumber();
aPerson.PhoneNumber.Number = "Test Phone";//Error: System.NullReferenceException : Object reference not set to an instance of an object.
aPerson.PhoneNumber = phoneNumber;
aPerson.PhoneNumber.Number = "Test Phone"; // This does not show any error
Console.WriteLine(aPerson.Name);
Console.WriteLine(aPerson.PhoneNumber.Number);
}
首先,我认为您的意思不是编译期间的错误,而是运行时的错误。
您的问题是 aPerson.PhoneNumber 在前 2 次尝试设置 Number 属性 时为空。直到你设置 aPerson.PhoneNumber = phoneNumber
它才不再为空。所以错误很明显。
如果您希望 aPerson.PhoneNumber.Number = "Test Phone";
像代码中所示那样工作,您必须先初始化 aPerson.PhoneNumber
。
这通常在 Person
class:
public class Person
{
public Person()
{
this.PhoneNumber = new PersonPhoneNumber();
}
public string Name { get; set; }
public PersonPhoneNumber PhoneNumber { get; set; }
}
免责声明:这只会解决您遇到的错误 - 通常这不是好的做法。