public IDictionary<object, object> Properties { get; } = new Dictionary<object, object>();
这个Properties 属性,只有get表示只读属性,为什么还可以给他 new Dictionary<object, object>();赋值呢?
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
这个也是的,Configuration 就是只读属性,为什么可以 Configuration = configuration;赋值呢?
类的内部可以给只读属性赋值,否则,只读属性岂不是只能是null了。是否只读是相对于类的外部而言的。
只有get方法并不代表是只读属性,只是只提供了这个属性的读取方法。通过new赋值是通过构造方法来初始化赋值,并不影响
public IDictionary<object, object> Properties { get; } = new Dictionary<object, object>();
我认为是相当于:
IDictionary<object, object> properties=new Dictionary<object, object>();
public IDictionary<object, object> Properties
{
get
{
return properties;
}
}
说实话纠结这些没啥意义,实际工作中没有什么用处,写法不同而已
https://docs.microsoft.com/zh-cn/dotnet/csharp/properties#read-only
需要去看看thinking in java中类型加载这章,或者是clr via中介绍的加载过程,因为所有的字段加载时候都是固定方式加载的,静态字段,在类型加载的时候通过静态构造器加载,首先赋值为空(0或者null),然后在控制器空赋值对应的值,所以你的想法中,字段即使是先赋值,也是通过2个步骤,一个是类型字段中的为空,一个是赋值操作