如果你有这样的代码:
class Program
{
static void Main(string[] args)
{
Test test = new Test();
test.PropOne = 123;
test.PropTwo = "testing";
ModifyTestClassWithRef(ref test);
}
public static void ModifyTestClassWithRef(ref Test test)
{
test.PropOne++;
test.PropTwo += "_abc";
}
}
public class Test
{
public int PropOne { get; set; }
public string PropTwo { get; set; }
}
为什么编译器没有提供关于“ref”没有必要的警告,因为在这种特殊情况下没有必要?
答案 0 :(得分:0)
对于您提出的问题,不应该警告。许多开发人员都很难理解并清除所有警告。有些团队甚至将警告提升为错误。如果一个接口或抽象基类"要求"一个方法有一个ref参数,并且实现不需要设置ref,然后实现者会得到警告,并且必须通过排除显式地修饰该方法。我确定在很多商店都不会令人满意。
另一方面,out参数明确保证实现者设置参数 - 你甚至可以在不设置的情况下进行编译。如果这是你想要的行为,那么out参数就是你的朋友。