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

时间:2012-07-25 13:33:24

标签: c# function coding-style parameters

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

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

使用C ++我对每个参数都使用'const'关键字,这个参数不会被函数修改,但是C#不允许使用const或'readonly'。缺少'const'并不意味着该参数无论如何都要由函数更新。

由于

1 个答案:

答案 0 :(得分:1)

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

此外,那些outref关键字是编译器的提示,它分析代码流并且不允许使用" uninitlized"变量。所以。即如果你声明方法:

void DoSomething(int i) { ... }

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

int x;
DoSomething(x);

编译器将禁止,因为x在通话时将未初始化。另一方面:

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

现在允许以下调用:

int x;
DoSomething(out x);

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