gpt4 book ai didi

c# - 为什么可以通过构造函数分配只读属性?

转载 作者:行者123 更新时间:2023-11-30 19:01:24 24 4
gpt4 key购买 nike

我已经将属性 Name 设置为只读,但它仍然可以被分配。

class Person
{
public string Name { get; }
public Person(string name)
{
Name = name;
}
}

尝试为属性 Name 设置值:

var p = new Person("Kevin");            
Console.WriteLine(p.Name); //output: Kevin
p.Name = "John"; //Property or indexer 'Person.Name' cannot be assigned to -- it is read only

你能解释一下为什么吗?

最佳答案

只能在属性声明的构造函数或初始化程序中赋值——就像只读字段只能在构造函数或字段初始化程序中赋值一样。

不会生成属性 setter - 编译器将使用只读字段,并在构造函数中对其进行初始化。因此生成的代码大致等同于:

class Person
{
private readonly string _name;

// Old school: public string Name { get { return _name; } }
public string Name => _name;

public Person(string name)
{
_name = name;
}
}

能够做到这一点非常有用,我真的很高兴它被添加到 C# 6。

关于c# - 为什么可以通过构造函数分配只读属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34003882/

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