没有 setter 的属性如何允许赋值?

var*_*ble 0 c#

在 C# 中,可以使用 getter 和 setter 来声明属性。如果没有设置器那么它不应该允许设置?

但是这个 .net core 3.1 示例教程显示了分配给此类属性的值。这怎么被允许呢?

代码:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
      
    public IConfiguration Configuration {get;}
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

只读属性只能设置:

  • 如果它是自动实现的属性(即属性主体只有{ get; }
  • 当设置属性在构造函数内时

只读属性实现为只读字段,在构造函数内设置该属性时,直接设置只读字段。

所以您发布的代码相当于:

public class Startup
{
    private readonly IConfiguration _configuration;
    public IConfiguration Configuration => _configuration;

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;
    }
}
Run Code Online (Sandbox Code Playgroud)