C# 显示函数参数是(或不是)要修改的最佳实践

C# 显示函数参数是(或不是)要修改的最佳实践,c#,function,coding-style,parameters,C#,Function,Coding Style,Parameters,函数参数往往有不同的用途:在大多数情况下,它们只是内部逻辑用来产生结果/效果的只读指示,但有时它们会被调用函数(初始化函数、排序算法等)修改 我想知道是否有一个最佳实践可以在代码中显示函数将修改一个参数(除了在上面写一条注释明确说明这一点之外)?就像一个被广泛认可的编码惯例 C++中,我使用每个参数的“const”关键字,这些参数不会被函数修改,但C ^不允许使用“const”或“只读”。而且缺少“const”并不意味着该参数无论如何都要由函数更新 感谢事实上,在C中,值类型参数(以及字符串,

函数参数往往有不同的用途:在大多数情况下,它们只是内部逻辑用来产生结果/效果的只读指示,但有时它们会被调用函数(初始化函数、排序算法等)修改

我想知道是否有一个最佳实践可以在代码中显示函数将修改一个参数(除了在上面写一条注释明确说明这一点之外)?就像一个被广泛认可的编码惯例

C++中,我使用每个参数的“const”关键字,这些参数不会被函数修改,但C ^不允许使用“const”或“只读”。而且缺少“const”并不意味着该参数无论如何都要由函数更新

感谢

事实上,在C中,值类型参数(以及字符串,由于不变性)在默认情况下是“const”,除非您用
out
ref
关键字显式标记它们。至于引用类型,函数只能修改参数引用的对象,而不能修改引用本身

此外,那些
out
ref
关键字是编译器的提示,它分析代码流并允许使用“未标题化”变量。所以i、 e.如果您声明方法:

void DoSomething(int i) { ... }
然后尝试从以下代码调用它:

int x;
DoSomething(x);
编译器将不允许,因为调用时,
x
将被取消初始化。另一方面:

void DoSomething(out int i) { ... i = 10; ... }
现在允许进行以下调用:

int x;
DoSomething(out x);

编译器现在知道,
DoSomething
将初始化x。请注意,
DoSomething
将不会编译,除非它包含一个statement,该statement为
i
参数指定一些值。

通常我在函数前的注释中使用[in]和[out]来指示是否修改参数。谢谢Kuba,但您的回答涵盖了参数修改的技术方面,而我的问题涉及到发展实践。更准确地说:我目前正在一个项目中编写接口,其他开发人员将使用它来实现自己的类。在其中一个接口中,有一个函数
foo(LinkedList data)
。如何显示链接列表是由函数修改的。当然,我可以添加一条评论,说“这个函数将不得不向列表中添加元素…”,但我想知道是否还有其他常见做法。好的,但在C#world中没有这样的惯例,或者至少我从未听说过。正如我所说,值类型总是只读的,引用类型(字符串除外)总是可变的。例如,非常常见的Array.Sort()对提供的数组参数进行排序(修改其内容),但未以任何方式指明。