代码:- (注意:- 在这里我使用只读字意味着属性只有获取访问器。)Class Test{ public List<string> list {get;} public string name{get;} public Test () { list =new List<string>(); }}Main(){ Test test =new Test(); test.list.add("c#"); //no error test.name="Jhon"; //here I get compilation because property name is read-only}如果你看到上面的片段。测试类包含两个属性,即名称和列表。在 main 方法中,我创建了测试类的对象来访问这些属性。因此,如果您看到我是否尝试将值设置为 name 属性,那么我将收到编译错误,因为 name 属性是只读的。同样,如果您看到另一个属性“列表”也是只读的,如果我使用 List 类的 add 属性,那么我可以毫无错误地添加到列表中。所以我不明白这是怎么发生的。
3 回答
侃侃尔雅
TA贡献1801条经验 获得超16个赞
您对“只读”属性的工作方式有误解。
如果您的代码如下所示:
Test test = new Test();
test.list.Add("c#"); //no error because you are not 'setting' the object
test.list = new List<string>(); //Error here because you ARE setting the object
Add()只是 a 的一种方法List<T>,您正在修改对象而不是将属性设置为其他内容。
如果您希望您的收藏为“只读”,您可以使用该ReadOnlyCollection界面。您可以在private内部管理列表,并且只能通过public ReadOnlyCollection. 你想要的功能从来没有说清楚,所以我不知道除了我所拥有的还有什么建议。
忽然笑
TA贡献1806条经验 获得超5个赞
那是因为set将引用设置List object,即集合的实际实例。在List本身,返回的时候,是不是只读。如果您希望它是只读的,您可以执行以下操作:
private List<string> list;
public ReadOnlyCollection<string> List {get => list.AsReadOnly()}
缥缈止盈
TA贡献2041条经验 获得超4个赞
public List<string> list {get;}
这意味着,如果您对name
.
test.list = new List<string>();
test.list
获取list
对象,然后调用对象的 Add 方法 list
。所以这是正常的。
- 3 回答
- 0 关注
- 263 浏览
添加回答
举报
0/150
提交
取消