为了账号安全,请及时绑定邮箱和手机立即绑定

C# 只读获取访问器

C# 只读获取访问器

C#
翻翻过去那场雪 2021-11-28 17:55:22
代码:- (注意:- 在这里我使用只读字意味着属性只有获取访问器。)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. 你想要的功能从来没有说清楚,所以我不知道除了我所拥有的还有什么建议。


查看完整回答
反对 回复 2021-11-28
?
忽然笑

TA贡献1806条经验 获得超5个赞

那是因为set将引用设置List object,即集合的实际实例。在List本身,返回的时候,是不是只读。如果您希望它是只读的,您可以执行以下操作:


private List<string> list;


public ReadOnlyCollection<string> List {get => list.AsReadOnly()}


查看完整回答
反对 回复 2021-11-28
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

public List<string> list {get;}

这意味着,如果您对name.

test.list = new List<string>();

test.list获取list对象,然后调用对象的 Add 方法 list。所以这是正常的。


查看完整回答
反对 回复 2021-11-28
  • 3 回答
  • 0 关注
  • 263 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信