gpt4 book ai didi

C#:使用内联对象实例化直接设置子类属性

转载 作者:行者123 更新时间:2023-11-30 21:03:27 26 4
gpt4 key购买 nike

我知道还有其他方法可以给这只猫蒙皮,但我希望有人能帮助我理解为什么在 C# 中,在实例化“主”对象内联时不能直接设置子类属性。

例如,如果我有以下类:

public class SubClass
{
public string SubField { get; set; }
}

public class MainClass
{
public string MainField { get; set; }
public SubClass Sub { get; set; }

public MainClass()
{
Sub = new SubClass();
}
}

如果我尝试以下操作,我会收到错误消息:

var main = new MainClass
{
MainField = "Main Value",
Sub.SubField = "Sub Value"
};

我在“Sub.SubField = ...”行得到的错误是:

* "Invalid initializer member declarator"
* "The name 'Sub' does not exist in the current context"

当然,以下是有效的:

var main = new MainClass
{
MainField = "Main Value",
Sub = new SubClass { SubField = "Sub Value" }
};

但是,它更麻烦,而且在我看来,封装性较差。

我很困惑为什么 C# 不能识别声明的对象和/或它如何知道它没有被实例化。在其他情况下就没那么小心了。

我确定我错过了一个重要的概念。有人来开导我吗?提前致谢!

最佳答案

这会做你想做的:

var main = new MainClass { 
MainField = "Main Value",
Sub = { SubField = "Sub Value" }
};

上面的代码实际上被编译成这样的东西:

var main = new MainClass(); 
main.MainField = "Main Value";
main.Sub.SubField = "SubValue";

我更喜欢对象初始化语法,因为它的噪音稍微小一些,而且因为大多数开发人员习惯于使用 C# block ,所以他们更有可能将所有内容放在一起。

我还建议让 MainClass 上的 Sub 属性具有私有(private)可设置性。

关于C#:使用内联对象实例化直接设置子类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12863960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com