显式和非显式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(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |