ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 将公共只读字段用于不可变结构而不是私有字段/公共getter对

2019-07-14 16:05:57  阅读:179  来源: 互联网

标签:c net field readonly getter-setter


这是我第一次编写将用于广泛几何计算的小型不可变结构.我很想使用公共只读字段而不是私有字段/公共getter组合.

public struct Vector4
{
    public readonly float Angle, Velocity;

    // As opposed to:
    private float _Angle, _Velocity;
    public float Angle { get { return (this._Angle); } }
    public float Velocity { get { return (this._Velocity); } }

    public Vector4 (float angle, float velocity)
    {
        // Once set in the constructor, instance values will never change.
        this.Angle = angle;
        this.Velocity = velocity;
    }
}

它看起来更清洁,并消除了额外的层(吸气剂).如果不使用公共字段是不好的做法,那么以这种方式使用公共只读字段是否有任何负面影响?

请注意,我们只讨论价值类型.例如,数组会通过调用代码来覆盖要覆盖的元素.

更新:

感谢所有的投入.对于没有使用数据绑定等的情况,使用公共只读字段似乎没有任何缺点.在我的基准测试中,执行时间下降了70%,这是一个大问题.针对.NET 4,我原本期望编译器内联getter-only属性.基准测试当然是在发布配置中测试的,没有附加调试器.

解决方法:

在没有反射的纯C#中,几乎没有理由避免在你的情况下使用只读字段,我可能会自己选择只读字段.属性的大多数一般优点在这里并不真正适用.那说……

任何使用反射来获取属性列表并对这些属性起作用的东西都不能在没有修改的情况下使用字段(无论是否为只读).

特别是,将属性更改为字段可能会导致数据绑定停止工作.它将继续编译而没有任何问题,但它将不再按照您的意愿执行.如果您有任何此类代码,或者您预计将来会使用此类代码,则需要继续使用属性.

标签:c,net,field,readonly,getter-setter
来源: https://codeday.me/bug/20190714/1459494.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有