加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

显式和非显式C#类初始化程序的区别

发布时间:2020-12-15 22:28:16 所属栏目:百科 来源:网络整理
导读:参见英文答案 Initializer syntax????????????????????????????????????2个 ???????????? Nested object initializer syntax????????????????????????????????????1个 这两个类初始值设定项之间产生的差异是什么?在C#中,两者似乎都是语法正确的.第二个是第
参见英文答案 > Initializer syntax????????????????????????????????????2个
>???????????? Nested object initializer syntax????????????????????????????????????1个
这两个类初始值设定项之间产生的差异是什么?在C#中,两者似乎都是语法正确的.第二个是第一个的快捷方式吗?

Class1 class1 = new Class1()
{
    Boolean1 = true,Class2Instance = new Class2
    {
        Boolean2 = true,},};

Class1 class1 = new Class1()
{
    Boolean1 = true,Class2Instance =
    {
        Boolean2 = true,};

我问,因为显然这样做无效:

Class1 class1 =
{
    Boolean1 = true,Class2Instance = new Class2()
    {
        Boolean2 = true,};

解决方法

你给出的两个例子并不完全相同.使用像ILSpy这样的工具,您可以检查编译器为这两个语句创建的内容.

第一个编译成如下所示(使用ILSpy反编译):

Class1 expr_06 = new Class1();
expr_06.Boolean1 = true;
expr_06.Class2Instance = new Class2
{
    Boolean2 = true
};

而第二个示例编译为以下(使用ILSpy反编译):

Class1 expr_06 = new Class1();
expr_06.Boolean1 = true;
expr_06.Class2Instance.Boolean2 = true;

如您所见,在第二个示例中,缺少使用new-keyword创建Class2Instance,并且在运行此代码时将获得NullReferenceException.

但是,当您在Class1的构造函数中创建新的Class2Instance时,可以防止在第二个示例中获取NullReferenceException:

class Class1
{
  public Class1()
  {
    Class2Instance = new Class2();
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读