猿问

C# 只读获取访问器

代码:- (注意:- 在这里我使用只读字意味着属性只有获取访问器。)


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 属性,那么我可以毫无错误地添加到列表中。所以我不明白这是怎么发生的。


翻翻过去那场雪
浏览 264回答 3
3回答

侃侃尔雅

您对“只读”属性的工作方式有误解。如果您的代码如下所示:Test test = new Test();test.list.Add("c#"); //no error because you are not 'setting' the objecttest.list = new List<string>(); //Error here because you ARE setting the objectAdd()只是 a 的一种方法List<T>,您正在修改对象而不是将属性设置为其他内容。如果您希望您的收藏为“只读”,您可以使用该ReadOnlyCollection界面。您可以在private内部管理列表,并且只能通过public ReadOnlyCollection. 你想要的功能从来没有说清楚,所以我不知道除了我所拥有的还有什么建议。

忽然笑

那是因为set将引用设置List object,即集合的实际实例。在List本身,返回的时候,是不是只读。如果您希望它是只读的,您可以执行以下操作:private List<string> list;public ReadOnlyCollection<string> List {get => list.AsReadOnly()}

缥缈止盈

public&nbsp;List<string>&nbsp;list&nbsp;{get;}这意味着,如果您对name.test.list&nbsp;=&nbsp;new&nbsp;List<string>();test.list获取list对象,然后调用对象的 Add 方法&nbsp;list。所以这是正常的。
随时随地看视频慕课网APP
我要回答