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

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

发布时间:2020-12-16 00:24:36 所属栏目:百科 来源:网络整理
导读:这是我第一次编写将用于广泛几何计算的小型不可变结构.我很想使用公共只读字段而不是私有字段/公共getter组合. public struct Vector4{ public readonly float Angle,Velocity; // As opposed to: private float _Angle,_Velocity; public float Angle { get
这是我第一次编写将用于广泛几何计算的小型不可变结构.我很想使用公共只读字段而不是私有字段/公共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#中,几乎没有理由避免在你的情况下使用只读字段,我可能会自己选择只读字段.属性的大多数一般优点在这里并不真正适用.那说……

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

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

(编辑:李大同)

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

    推荐文章
      热点阅读