为什么C#不是用变量和方法的'const'设计的?

时间:2010-06-03 17:12:14

标签: c# const

  

可能重复:
  “const correctness” in C#

我怀疑{C}规范简化了const以简化通用语言。是否有一个特定的原因我们不能像C ++一样将变量引用或方法声明为const? e.g:

const MyObject o = new MyObject();  // Want const cast referenece of MyObject
o.SomeMethod();    // Theoretically legal because SomeMethod is const
o.ChangeStuff();   // Theoretically illegal because ChangeStuff is not const

class MyObject 
{
   public int val = 0;

   public void SomeMethod() const 
   {
      // Do stuff, but can't mutate due to const declaration.
   }

   public void ChangeStuff() 
   {
      // Code mutates this instance.  Can't call with const reference.
      val++;
   }
}

3 个答案:

答案 0 :(得分:1)

const在任何地方执行编译时替换值,因此没有任何运行时含义。一般来说,对于const对象的建议,编译器很难确定(如果方法是否会修改对象)。您使用const关键字作为访问修饰符的建议也会给编写者带来负担,您仍然会遇到验证某些内容是否修改该对象的问题。此外,您在对象上强加了一些在所有上下文中都没有意义的东西。如果方法是const但是你没有将它用作const对象,这意味着什么?您想要的功能通常是通过实现一个接口并只暴露该类的“只读”部分来实现的。

答案 1 :(得分:0)

我怀疑你问题的第一句话是否有答案。

答案 2 :(得分:0)

我相信你可以在C#中将变量声明为conststatic,如果你觉得有必要的话。{/ p>

http://msdn.microsoft.com/en-us/library/e6w8fe1b(VS.71).aspx