Bri*_*sio 107 c# language-design readonly immutability
与同事就此进行了友好的辩论.我们对此有一些想法,但想知道SO人群对此有何看法?
and*_*iej 61
我认为这对C#架构师来说是一个糟糕的判断.局部变量的readonly修饰符有助于维护程序的正确性(就像断言一样)并且可以帮助编译器优化代码(至少在其他语言的情况下).现在它在C#中被禁止的事实是另一个论点,即C#的一些"特征"仅仅是对其创作者的个人编码风格的执行.
Jon*_*eet 33
解决Jared的答案,它可能只是一个编译时功能 - 编译器会禁止你在初始声明后写入变量(必须包含一个赋值).
我能看到这个价值吗?可能 - 但不是很多,说实话.如果您无法轻易判断变量是否将在方法中的其他位置分配,那么您的方法太长.
对于它的价值,Java有此功能(使用final
修改器),我已经非常难得一见它使用比在其情况下,其他有被用来使变量通过一个匿名内部类被捕获-并且它是使用它,它给我一个杂乱而不是有用信息的印象.
Col*_*nic 26
C#7设计团队简要讨论了一个只读本地和参数的建议.来自2015年1月21日的C#设计会议记录:
lambdas可以捕获参数和本地,从而同时访问它们,但是没有办法保护它们免受共享 - 共同状态问题的影响:它们不能只读.
通常,大多数参数和许多局部变量在获得初始值后从不打算分配.只读它们就可以清楚地表达这一意图.
一个问题是这个特征可能是"有吸引力的麻烦".虽然"正确的事情"几乎总是要使参数和本地人只读,但这样做会使代码混乱.
部分缓解这一点的想法是允许将局部变量上的readonly var组合缩小为val或类似的短路.更一般地,我们可以尝试简单地考虑比建立的只读更短的关键字来表达读取性.
C#语言设计回购继续讨论.投票表示您的支持.https://github.com/dotnet/csharplang/issues/188
Jar*_*Par 14
一个原因是对于只读本地没有CLR支持.Readonly被翻译成CLR/CLI initonly操作码.此标志只能应用于字段,对本地没有意义.实际上,将其应用于本地可能会产生无法验证的代码.
这并不意味着C#无法做到这一点.但它会给同一语言结构赋予两种不同的含义.本地版本没有CLR等效映射.
小智 7
我是那个同事而且不友善!(开玩笑)
我不会消除这个功能,因为编写简短的方法会更好.这有点像说你不应该使用线程,因为它们很难.给我刀,让我负责不切割自己.
就个人而言,我想要另一个"var"类型的关键字,如"inv"(invarient)或"rvar",以避免混乱.我一直在研究F#,发现不可改变的东西很有吸引力.
从来不知道Java有这个.
我希望本地只读变量的方式与我喜欢本地const变量的方式相同.但它的优先级低于其他主题.
也许它的优先级与C#设计者没有(还是!)实现此功能的原因相同.但是在未来版本中支持本地只读变量应该很容易(并且向后兼容).
归档时间: |
|
查看次数: |
19052 次 |
最近记录: |