函数参数往往有不同的用途:在大多数情况下,它们只是内部逻辑用来产生结果/效果的只读指示,但有时它们会被调用函数(初始化函数、排序算法等)修改。
我想知道是否有最佳实践可以在代码中显示该函数将修改参数(除了在上面写注释明确说明这一点)?就像一个广泛认可的编码约定。
对于 C++,我对函数不会修改的每个参数都使用“const”关键字,但 C# 不允许以这种方式使用 const 或“readonly”。并且缺少“const”并不意味着该参数无论如何都打算由函数更新。
谢谢
函数参数往往有不同的用途:在大多数情况下,它们只是内部逻辑用来产生结果/效果的只读指示,但有时它们会被调用函数(初始化函数、排序算法等)修改。
我想知道是否有最佳实践可以在代码中显示该函数将修改参数(除了在上面写注释明确说明这一点)?就像一个广泛认可的编码约定。
对于 C++,我对函数不会修改的每个参数都使用“const”关键字,但 C# 不允许以这种方式使用 const 或“readonly”。并且缺少“const”并不意味着该参数无论如何都打算由函数更新。
谢谢
实际上,在 C# 值类型参数(和字符串,由于不变性)默认情况下是“const”,除非您使用out
orref
关键字显式标记它们。至于引用类型,函数只能修改参数所指的对象,不能修改引用本身。
此外,这些out
和ref
关键字是编译器的提示,用于分析代码流并禁止使用“未初始化”变量。所以。即,如果您声明方法:
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
。