为什么C#中没有声明性的不变性?

为什么C#中没有声明性的不变性?,第1张

概述为什么C#的设计师不允许这样的东西? public readonly class ImmutableThing{ ...} 安全多线程最重要的方法之一是使用不可变对象/类,但没有办法将类声明为不可变的.我知道我可以通过正确的实现使它变得不可变,但是通过类声明强制执行它将使它变得更加容易和安全.评论一个不可改变的类是最好的“门道”解决方案. 看一个类的声明,你会立即知道这是不可变的.如果 为什么C#的设计师不允许这样的东西?
public Readonly class ImmutableThing{    ...}

安全多线程最重要的方法之一是使用不可变对象/类,但没有办法将类声明为不可变的.我知道我可以通过正确的实现使它变得不可变,但是通过类声明强制执行它将使它变得更加容易和安全.评论一个不可改变的类是最好的“门道”解决方案.

看一个类的声明,你会立即知道这是不可变的.如果你必须修改别人的代码,你会知道一个类不允许意图更改.我只能看到优势,但我不敢相信以前没有人想过这个.那为什么不支持?

编辑

有人说这不是很重要的功能,但这并不能说服我.多核处理器出现,因为频率增加的性能提高.超级计算机是大量的多处理器机器.并行处理越来越重要,也是提高性能的主要方法之一.对.NET中的多线程和并行处理的支持是非常重要的(各种锁类型,线程池,任务,异步调用,并发集合,阻塞收集,并行foreach,PliNQ等),并且在我看来,帮助您编写并行代码更容易给出一个优势.即使实施不是微不足道的.

解决方法 基本上,因为它是复杂的 – 和usr写的,功能需要大量的工作,在各种各样的方式准备发货之前. (很容易成为一名扶手椅语言设计师 – 我确信,使用数百万具有关键代码库的开发人员的语言,真的很难做到这一点,而这些开发人员不能被变更所破坏.)

一个编译器验证一个类型是明显不可变的,而不是在某些情况下过于严格的限制是棘手的.作为一个例子,String在mscorlib中实际上是可变的,但是其他类型的代码(例如StringBuilder)已经被非常仔细地写入,以避免外部世界看到可变性.

Eric lippert拥有written a lot on immutability – 这是一个复杂的主题,它将/需要大量的工作来转化为实用的语言功能.对于没有开始的语言和框架也是很难改造的.我会喜欢C#,至少可以使写入不可变类型更容易,我怀疑这个团队花费了不少时间思考,无论他们是否乐意将自己的想法变成一种生产语言功能,一个不同的事情

总结

以上是内存溢出为你收集整理的为什么C#中没有声明性的不变性?全部内容,希望文章能够帮你解决为什么C#中没有声明性的不变性?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1263233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存