c#IEnumerable属性.将项添加到集合中是调用mutator还是只调用访问器?

Jon*_*son 0 .net c# ienumerable

假设我有

class A
{

 public List<B> LiProperty
 {
    get;
    set { //will I get called when someone calls A::LiProperty.Add()? }
 }

}
Run Code Online (Sandbox Code Playgroud)

然后

A a = new A();
a.LiProperty.Add(new B());
Run Code Online (Sandbox Code Playgroud)

变种人会被召唤吗?

我的直觉说get正在返回一个指向列表的指针,因此直接在对象上调用add方法,但是C#再次使用不可变类型做了一些时髦的东西.有人知道答案肯定吗?

Jas*_*ski 6

你的直觉是正确的.在上面的代码片段中,get调用访问器,并在Add返回的List上调用该方法.


Cha*_*ana 5

更改属性是将其更改为指向另一个不同的属性List<T>.将对象添加到列表中不会改变 List<T>属性点.除非你写的,否则代码不会调用settera.LiProperty = new List<T>();