微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 使用ref来改变部分不可变类的方法设计

在我的项目中,我有一个标题类,表示系统内部信息的全局唯一键,例如它属于谁,它存在的时间等.在同一个标​​题类中,我还有信息字段特定于给定的数据实例,例如创建此版本信息的人员,创建信息的时间,是否需要将其保存到数据库中的新数据等.

下面是将一些信息存入数据传输类并将其查询回来的示例.

var header = new IntvlDataHeader(
       datapoint: Guid.NewGuid(),element: Guid.NewGuid(),intervalUtc: DateTime.Now.Date);

package.StockData_Decimal(header,5m);

decimal cloneData;
package.TryGetData_Decimal(ref header,out cloneData);

// header Now refers to a different object,that Could have different flags/@R_24_4045@ion

注意我是如何通过引用使TryGetData_Decimal传递头变量的. IntvlDataHeader是一个类,如果在TryGetData中找到数据,则引用被更改为指向具有特定实例信息的IntvlDataHeader的新实例,以及具有相同的唯一密钥信息.

将密钥与实例特定信息组合在一起并使用ref参数作为进出坏设计的内容吗?分裂另一个类的努力是否会有两个参数和没有参考参数更好或避免任何潜在的问题?

方法的签名是public bool TryGetData_Decimal(ref IntvlDataHeader header,out decimal data)

解决方法

我认为TryGetData_Decimal的命名是误导性的,如果传入的ref参数将在方法退出时指向新实例.对我来说,TryGetData_Decimal听起来像是许多值类型上的TryParse方法的变体(其具有包含解析值的out参数 – 类似于cloneData参数).

我想我不确定为什么头对象必须指向一个新实例,所以我不确定我是否可以推荐一个设计.如果这就是你需要做的,我认为如果你的TryGetData_XXX方法有这样的签名,它可能更具可读性:

IntvlDataHeader ExtractValueAndGetNewInstance_Decimal(IntvlDataHeader header,out decimal cloneData)

传入标头的位置,但在方法退出时不会更改.该方法返回新实例,如果需要,可以使用它.我不会改变cloneData – 只要它们没有被过度使用,我认为参数是可以的.

我会尝试将方法名称更改为更有意义的名称.

我希望这有帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐