为什么不实例化对象会自动实例化其属性?

问题描述 投票:4回答:2

我有以下课程:

public class CustomerResult
{
    public string CompanyStatus { get; set; }
    public OverallResult Result { get; set; }
}

public class OverallResult
{
    public string StatusDescription { get; set; }
    public int StatusCode { get; set; }
    public string CustomerId { get; set; }        
}

我实例化:

var apiResult = new CustomerResult();

为什么以下返回空引用?当我创造OverallResult时,当然CustomerResult()被实例化了吗?

apiResult.Result.CustomerId = "12345";
c# .net instance
2个回答
16
投票

因为您没有为Result创建实例。默认情况下,引用类型具有空值,而OverallResult是一个类,因此是引用类型。

你可以在构造函数中完成它。

public class CustomerResult
{
    public string CompanyStatus { get; set; }
    public OverallResult Result { get; set; }
    public CustomerResult(){
        Result = new OverallResult();
    }
}

如果你的qazxsw poi版本高于6.0,那么qazxsw poi就会更简单

C#6使您可以为自动属性声明中的auto-property使用的存储分配初始值:

C#

2
投票

子对象未自动实例化的原因之一是您可能不想调用默认构造函数,或者甚至您想强制程序员使用足够的参数调用构造函数来正确初始化类,因此没有公共默认构造函数。

你可以争辩说,如果有一个默认的构造函数,那么它应该总是运行,然后是你真正想要的那个,但是你要做两次同样的工作。

Auto-Property Initializers
© www.soinside.com 2019 - 2024. All rights reserved.