加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何链接字段和属性?

发布时间:2020-12-16 02:00:45 所属栏目:百科 来源:网络整理
导读:我正在编写的一本书(Wrox Beginning Visual C#2012,到目前为止是一本很棒的书)在一个例子中使用了这个类: class FarmT : IEnumerableT where T : Animal{ private ListT animals = new ListT(); public ListT Animals { get { return animals; } } public I
我正在编写的一本书(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>类型的对象的引用的地方.您没有创建新列表或将参考点指向其他列表.参考保持不变.你只是在引用的对象上调用一个方法.这就是为什么它只是被称为属性的吸气剂.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读