c# - C# 引用类型替代值类型
问题描述
我知道有不同的帖子与围绕这个主题的问题相关,但我找不到任何关于我的问题的来源。
在某些情况下,如果值类型表现为引用类型会容易得多,即可以在另一个方法中修改它们。例如,我想跟踪一些类型的值类型int
并将其中的几个传递给一个方法,该方法可能会修改它们。让我们假设,在执行该方法后,我需要在调用方使用更新的值。当然,有多种方法可以实现这一点,但问题是,将它们传递integers
给一个可以返回的方法会简单得多void
,但我们仍然可以获得这些的更新值integers
,因为我们持有引用。
据我所知,C# 中没有这样的包装器/类可以代表与值类型相同的体验,但仍是引用类型。(例如对于int
,包装器仍然应该做 ++,--,具有相同的范围等)
所以我的问题是为什么语言中没有这样的选择?我的假设是因为模棱两可,并且有一个直接的做事方式。并摆脱比较两个不同类型的相等值等的一些小麻烦。如果有人真的需要,他/她可以实现它。
你对这个话题有什么看法?为什么语言不应该有这种值类型的包装器?
解决方案
例如,我想跟踪一些 int 类型的值类型并将其中的几个传递给一个方法,该方法可能会修改它们。
注意对“几个”的强调。这是创建对象的绝佳机会。所以代替这个:
UpdateValues(value, anotherVal, 12, someString, etc);
你会有这个:
UpdateValues(valuesToUpdate);
您在该方法中设置的该对象上的任何属性确实会反映在该对象本身上。因为该对象只有一个实例。您不是在为变量设置值,而是在更新引用的属性。
基本上,不是传递裸值,而是组成有意义的对象并使用它们。这些对象可以填充您喜欢的所有业务逻辑,可以以您喜欢的任何方式进行修改等。
至于关于为什么一种语言具有或不具有您个人可能希望它具有的任何给定功能的辩论和意见......
我们可以花一整天时间想出人为的例子,讨论是否需要它,是否会使代码更简单或更复杂,其他优点和缺点,等等。但是已经研究过一种主要语言的人已经说得更好了。解释这个问题:
这是一个错误的问题。相反,要问:“是否有令人信服的理由来实施和支持此功能?” 如果没有,则无需考虑、争论、设计、指定、实施、测试、记录、交付给客户或与 C# 的每个未来功能兼容的支持此功能的规则。这是一个显着的成本节约。
推荐阅读
- xamarin - 如何在 Xamarin Forms 中以适当的图像比例在 UWP 中设置 SpashScreen?
- javascript - 编写一个满足以下测试的函数 f
- ios - NSInvalidArgumentException:Workout_Tracker.QuickAddViewController collectionView:numberOfItemsInSection:]:无法识别的选择器发送到实例
- vba - Excel - 在单独的工作表中输入 A 列的值时,粘贴 2 列引用的 B 列的值
- react-native - Expo React Native - 构建 apk 后组件切换位置/使用 QR 码打开
- vue.js - nuxt 应用程序中的 Vuex 抛出“不要在突变处理程序之外改变 vuex 存储状态”!
- c# - 在 C# 中调用 AWS Lambda 函数
- elasticsearch - 为 json 中的数据选择正确的日期格式
- javascript - CSS 过渡不能在与样式更改相反的方向上工作?
- python - 大熊猫的科学记数法