代码之家  ›  专栏  ›  技术社区  ›  spoulson

为什么C#没有为变量和方法设计“const”[[副本]

  •  8
  • spoulson  · 技术社区  · 16 年前

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

    我怀疑 const 为实现一般语言的简单性而简化了C规范。我们不能将变量引用或方法声明为 常数 就像我们可以用C++?例如。:

    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 回复  |  直到 9 年前
        1
  •  1
  •   Craig Suchanec    16 年前

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

        2
  •  0
  •   zneak    16 年前

    我怀疑你问题的第一句话回答了这个问题。

        3
  •  0
  •   Caleb Hearth    16 年前

    我相信可以将变量声明为 const 在C#。 static

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

    推荐文章