C#中的Const函数参数

时间:2012-06-11 14:16:24

标签: c#

  

可能重复:
  Read-only (“const”-like) function parameters of C#
  Why is there no const member method in C# and const parameter?

过去用C ++编程,我记得我们可以在方法中创建一个常量的引用/指针参数。

如果我的记忆是正确的,则下面的意思是该方法不能改变参考,而参考本身是一个常量参考。

C ++示例

void DisplayData(const string &value) const
{
   std::count << value << endl;
}

类中的方法在C#中是否有等价物?

我问的原因是,我试图通过引用传递一个对象(速度),同时不希望任何人改变它。

2 个答案:

答案 0 :(得分:12)

C#没有等效内容,之前已被问过manymanymanymany次。

如果您不希望任何人改变“引用”,或者您可能意味着对象的内容,请确保该类不公开任何公共setter或变更类的方法。如果您无法更改类,请让它实现一个仅以只读方式公开公开成员的接口,并改为传递接口引用。

如果您想要停止更改引用的方法,那么默认情况下,如果您通过“引用”传递它,则实际上是按值传递引用。从方法更改引用指向的任何尝试只会影响本地方法副本,而不会影响调用方的副本。这可以通过在引用类型上使用ref关键字来更改,此时方法可以将引用指向新的基础对象,并且影响来电者。

答案 1 :(得分:1)

对于值类型(intdoublebytechar,...,struct),参数以值的形式出现,因此保证不会影响该调用模块。

对于string类型,虽然它是一个引用类型,但它是CLR不可变的,这样你在程序中做的任何事都不会影响原始字符串。

对于其他引用类型(class),无法保证方法中类的更改。