理解有关系实现C#

时间:2016-03-08 18:04:04

标签: c# associations relationship

我的观点是,aPerson.PhoneNumber.Number是一个字符串,因此它应该采用字符串类型值。

同样,在代码中,aPerson.PhoneNumber = phoneNumber aPerson.PhoneNumberphoneNumber都是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);
    }

2 个答案:

答案 0 :(得分:1)

如果您希望abc = a.c call(["vim", abc]) 按照您的代码所示工作,则必须先初始化aPerson.PhoneNumber.Number = "Test Phone";

这通常在aPerson.PhoneNumber类的构造函数中完成:

Person

免责声明:这只能解决你得到的错误 - 一般来说这不是好习惯。

答案 1 :(得分:0)

首先,我不认为你在编译期间意味着错误,而是在运行时。

您的问题是,对于设置Number属性的前2次尝试,aPerson.PhoneNumber为null。直到您将def create_app(dev=False): app = Flask(__name__) if dev: app.config['DEBUG'] = True else: ... app.logger.addHandler(file_handler) return app 设置为不再为空为止。所以错误很清楚。