首页新闻找找看学习计划

只读属性赋值疑问

0
[已解决问题] 解决于 2020-01-07 11:32

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;赋值呢?

haoyoulai的主页 haoyoulai | 菜鸟二级 | 园豆:209
提问于:2020-01-06 10:33
< >
分享
最佳答案
1

类的内部可以给只读属性赋值,否则,只读属性岂不是只能是null了。是否只读是相对于类的外部而言的。

奖励园豆:5
会长 | 大侠五级 |园豆:6161 | 2020-01-06 11:40
其他回答(4)
1

只有get方法并不代表是只读属性,只是只提供了这个属性的读取方法。通过new赋值是通过构造方法来初始化赋值,并不影响

ki16 | 园豆:217 (菜鸟二级) | 2020-01-06 10:49
1

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;
}
 } 

说实话纠结这些没啥意义,实际工作中没有什么用处,写法不同而已

猝不及防 | 园豆:1861 (小虾三级) | 2020-01-06 11:53
1

https://docs.microsoft.com/zh-cn/dotnet/csharp/properties#read-only

左眼水星 | 园豆:45 (初学一级) | 2020-01-06 15:34
0

需要去看看thinking in java中类型加载这章,或者是clr via中介绍的加载过程,因为所有的字段加载时候都是固定方式加载的,静态字段,在类型加载的时候通过静态构造器加载,首先赋值为空(0或者null),然后在控制器空赋值对应的值,所以你的想法中,字段即使是先赋值,也是通过2个步骤,一个是类型字段中的为空,一个是赋值操作

Best_Hong | 园豆:204 (菜鸟二级) | 2020-01-07 14:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册