为什么';tc#提供类似于C+的常数+;? > C中引用与C++相似,除了垃圾收集。p>
为什么C#编译器很难支持以下内容:为什么';tc#提供类似于C+的常数+;? > C中引用与C++相似,除了垃圾收集。p>,c#,compiler-construction,reference,constants,C#,Compiler Construction,Reference,Constants,为什么C#编译器很难支持以下内容: 成员函数标记为const 对标记为const的数据类型(字符串除外)的引用,通过这些数据类型只能调用const成员函数 我相信如果C#支持这一点,它将非常有用。首先,它确实有助于C#程序员返回对私有数据的赤裸裸引用(至少我在工作场所看到过这样的情况),这似乎是一种普遍存在的同性恋倾向 或者在C#中已经有我缺少的东西了?(我知道readonly和const关键字,但它们并不能真正达到上述目的)问题是,我们需要C#中的constness吗 我很确定抖动知道给定的方
const
const
的数据类型(字符串除外)的引用,通过这些数据类型只能调用const
成员函数或者在C#中已经有我缺少的东西了?(我知道
readonly
和const
关键字,但它们并不能真正达到上述目的)问题是,我们需要C#中的constness吗
call
而不是callvirt
?)除此之外,C#还有
readonly
关键字。我怀疑有一些实际原因,也有一些理论原因:
- 常量应该应用于对象还是引用?如果它在引用中,那么这应该只是编译时,还是作为引用本身的一部分?其他对同一对象具有非常量引用的对象可以在引擎盖下摆弄它吗 <>你想在C++中把它丢掉吗?这听起来不太像你在托管平台上想要的东西。。。但是在C++中有什么意义呢?
- 当一个声明中涉及多个类型时,语法会变得很复杂(IMO),比如数组、泛型等。很难精确地确定哪一位是常量
- 如果你不能抛弃它,每个人都必须正确对待它。换句话说,无论是.NET framework类型还是您使用的任何其他第三方库都必须做正确的事情,否则您将面临糟糕的情况,因为constness存在一个微妙的问题,您的代码无法做正确的事情
- 向后兼容性:不可能所有库都正确迁移到它,这使得它几乎毫无用处:(
如果不可变类型被添加到C#的未来版本中,我不会感到惊讶。 C#3.0已经朝着这个方向发展 例如,匿名类型是不可变的
我认为,由于设计了支持并行性的扩展,您可能会看到不变性越来越多地出现。我不同意您所说的“constness的大多数优点都与性能相关”我认为大部分是正确和可维护性。它不是为了抖动的方便,而是为了程序员。在C++中,如果我正在尝试修改一个const对象,编译器会给我一个错误。所以,例如,我可以从我的方法返回const引用。危险!谢谢Jon。这很有启发性。有趣的是,我还没有看到。不过,我认为从功能的角度来看(正如我在回答中提到的),任何困难都是值得的。