17

可能重复:
C# 的只读(类似“const”)函数参数
为什么 C# 中没有 const 成员方法和 const 参数?

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

如果我的记忆是正确的,下面的意思是,该方法不能改变引用并且引用本身是一个常量引用。

C++ 示例

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

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

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

4

2 回答 2

18

2020 年 16 月 9 日更新

现在似乎有表现出这种行为的in参数修饰符ref readonly(本质上是 a )。简要搜索您何时会使用它会产生以下答案:

为什么有人会在 C# 中使用“in”参数修饰符?

原始答案

C# 没有等价物,它之前已经被很多很多

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

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

于 2012-06-11T14:19:31.933 回答
1

对于值类型(int, double, byte, char,..., struct),参数作为值出现,因此保证不会影响调用模块。

对于string类型,虽然它是引用类型,但它在 CLR 中是不可变的,因此您在过程中所做的任何事情都不会影响原始字符串。

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

于 2012-06-11T14:30:28.847 回答