代码检查:参数隐藏主构造函数参数
如果在初始化期间抛出异常,使用对象初始化器初始化 using 变量可能会成为问题。 这是可能的,因为编译器会在执行进入 using 子句之前创建并初始化对象。 如果在初始化期间抛出异常,程序将永远不会进入 using 子句,并且对象将不会被释放。
在下面的示例中, Print() 方法的参数 str 与 MySample 类的主构造函数参数同名,但仍然可以清楚地看到 Console.WriteLine(str); 将输出 two。
现在假设 MySample 和 Print() 是具有多个参数的冗长声明。 在这种情况下,代码的读者可能会忽略方法中的 str 参数,并假设 Console.WriteLine(str); 将输出在对象创建期间接收到的 one。
为避免混淆和潜在错误,请重命名方法参数。
public class MyTest
{
public MyTest()
{
var sample = new MySample("one");
sample.Print("two");
}
}
public class MySample(string str)
{
public void Print(string str)
{
Console.WriteLine(str);
}
}
最后修改日期: 2025年 9月 27日