c# – 如何链接字段和属性?
我正在编写的一本书(Wrox Beginning Visual C#2012,到目前为止是一本很棒的书)在一个例子中使用了这个类:
class Farm<T> : IEnumerable<T> where T : Animal { private List<T> animals = new List<T>(); public List<T> Animals { get { return animals; } } public IEnumerator<T> GetEnumerator() { return animals.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return animals.GetEnumerator(); } //... } 我的问题是:编译器如何“知道”属性“动物”和字段“动物”是否相关联,这样,当在程序中,我实例化农场< Animal>时,然后说myFarm.Animals.Add(new Cow());该对象被添加到私人列表?我知道这是真的,因为我可以看到调查员在动物身上进行迭代,因此当我说foreach(myFarm中的动物动物)时,我看到了我之前添加到动物中的动物物体. 当我们谈论像int这样的简单字段时,这对我来说更有意义.在这种情况下,很明显,当我设置MyInt = 1并且这导致myInt == 1时,这是因为该属性通过set访问器链接到该字段. 解决方法
它并不“知道”它们是“联系在一起的”.它只是执行此代码:
public List<T> Animals { get { return animals; } } 当您编写myFarm.Animals.Add(…)时,运行时会为您的Animals属性执行getter方法.这种方法返回动物(因为这就是你写它的方式).然后在结果上调用Add()方法. 我认为你的困惑可能是你觉得你正在“修改”动物属性,因此你期望有一套参与其中.不是这种情况.该属性只是获取或引用List< T>类型的对象的引用的地方.您没有创建新列表或将参考点指向其他列表.参考保持不变.你只是在引用的对象上调用一个方法.这就是为什么它只是被称为属性的吸气剂. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |