0

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

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

对于 C++,我对函数不会修改的每个参数都使用“const”关键字,但 C# 不允许以这种方式使用 const 或“readonly”。并且缺少“const”并不意味着该参数无论如何都打算由函数更新。

谢谢

4

1 回答 1

1

实际上,在 C# 值类型参数(和字符串,由于不变性)默认情况下是“const”,除非您使用outorref关键字显式标记它们。至于引用类型,函数只能修改参数所指的对象,不能修改引用本身。

此外,这些outref关键字是编译器的提示,用于分析代码流并禁止使用“未初始化”变量。所以。即,如果您声明方法:

void DoSomething(int i) { ... }

然后尝试从以下代码中调用它:

int x;
DoSomething(x);

编译器将不允许,因为x在调用时将未初始化。另一方面:

void DoSomething(out int i) { ... i = 10; ... }

现在允许以下调用:

int x;
DoSomething(out x);

因为编译器现在知道这DoSomething将初始化 x。请注意,DoSomething除非它包含一个为参数分配一些值的状态,否则它不会编译i

于 2012-07-25T13:50:01.223 回答