init 与 get only 属性之间的区别?[复制]

different between init vs get only property? [duplicate]

提问人:Roohallah Azizi 提问时间:11/14/2023 最后编辑:Roohallah Azizi 更新时间:11/14/2023 访问量:42

问:

C# 中的 init 与 get only 属性有什么区别?

样本:

public class person
    {
        public string Name { get; init; }
        public string Family { get; }
    }

我试图弄清楚,我知道他们俩都可以让你的财产只读,但我无法弄清楚有什么区别,以及我们什么时候应该选择其中一个而不是另一个。

C# net-4.8

评论

0赞 Arthur Attout 11/14/2023
一个将从外部创建只读属性,而另一个将创建真正的只读属性。这基本上就是区别。

答:

1赞 scottdavidwalker 11/14/2023 #1

只能在对象初始化期间设置“仅获取”属性。私有集将允许您随时更改该类中的属性。

1赞 beautifulcoder 11/14/2023 #2

不同之处在于,您可以在类中设置 from。while 是只读的,因此只能从构造函数中设置它。NameFamily

例如

var p = new Person("fam");
p.SetName("name");

public class Person
{
    public Person(string family) // constructor
    {
        Family = family;
    }
        
    public void SetName(string name)
    {
        Name = name; // allowed from within
    }
        
    public void SetFamily(string family)
    {
        Family = family; // error
    }
    
    public string Name { get; private set; }
    public string Family { get; }
}