当前位置:  开发笔记 > 编程语言 > 正文

为什么C#不提供类似于C++的constness?

如何解决《为什么C#不提供类似于C++的constness?》经验,为你挑选了3个好方法。

C#中的引用与C++中的引用非常相似,只是它们是垃圾回收的.

为什么C#编译器支持以下内容如此困难:

    会员职能标记const.

    引用标记的数据类型(字符串除外)const,通过它只能const调用成员函数?

我相信如果C#支持这个会非常有用.首先,它真的有助于看似广泛的同性恋放弃C#程序员返回裸体引用私人数据(至少这是我在我的工作场所看到的).

或者在C#中我已经缺少了相同的东西?(我知道关键字readonlyconst关键字,但它们并没有真正满足上述目的)



1> Jon Skeet..:

我怀疑有一些实际原因,以及一些理论上的原因:

常量应该适用于对象还是引用?如果它在引用中,那么这应该只是编译时,还是引用本身内的一点?对于同一个对象有非const引用的其他东西可以在引擎盖下摆弄吗?

您是否希望能够在C++中将其丢弃?这听起来不像你在托管平台上想要的东西......但是那些在C++中有意义的时候呢?

当声明中涉及多个类型时,语法会变得棘手(IMO) - 想想数组,泛型等等.很难确定哪个位是const.

如果你不能把它扔掉,每个人都必须把它弄好.换句话说,.NET框架类型和您使用的任何其他第三方库都必须做正确的事情,否则您将面临令人讨厌的情况,即您的代码无法做正确的事情,因为有一个微妙的问题常量性.

虽然现在无法支持它,但它有一个很大的问题:

向后兼容性:没有办法将所有库正确迁移到它,使它几乎无用:(

我同意有一些常量指标是有用的,但我不能看到它发生,我害怕.

编辑:关于Java社区中的这种肆虐已有多年的争论.对相关的bug有很多评论,你可能会觉得有趣.



2> philsquared..:

正如乔恩已经涵盖的那样(当然)const正确性并不像看起来那么简单.C++以一种方式做到了.D做另一种(可以说是更正确/有用)的方式.C#与它调情,但没有做任何更大胆的事情,正如你已经发现的那样(并且可能永远不会好,因为Jon再次覆盖了).

也就是说,我相信Jon的许多"理论原因"在D模型中得到了解决.

在D(2.0)中,const的工作方式与C++非常相似,只是它是完全传递的(因此应用于指针的const将应用于指向的对象,该对象的任何成员,对象具有的任何指针,指向的对象等) ) - 但显而易见的是,这适用于您声明为const的变量(因此,如果您已经有一个非const对象并且您使用了一个const指针,那么非const变量仍然可以改变状态).

D引入了另一个关键字 - 不变量 - 它适用于对象本身.这意味着一旦初始化就没有任何东西可以改变状态.

这种安排的好处是const方法可以接受const和不变对象.由于不变对象是功能世界的面包和黄油,而const方法在功能意义上可以被标记为"纯粹" - 即使它可以与可变对象一起使用.

回到正轨 - 我认为我们现在只是(后半部分的顽皮分子)了解如何最好地使用const(和不变量)..Net最初是在事情变得更加朦胧的时候定义的,所以并没有过多地承诺 - 现在改造已经太晚了.

我很想在.Net VM上看到D的端口,但是:-)



3> Tamas Czineg..:

C#语言的设计师Mr. Heljsberg已回答了这个问题:

http://www.artima.com/intv/choicesP.html

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有