我有一个方法,它接受ref参数。有没有办法使用相同的方法(没有重载)没有传递参数为ref?
答案 0 :(得分:10)
没有。 ref关键字指定方法可以修改传递的值(如果是非值类型的引用,我相信)。
编译器会强制执行参数的'ref-ness',以确保作为消费者,您知道在调用后该值可能会有所不同。
如果您确实不想更改变量,请复制并使用副本调用它。
答案 1 :(得分:3)
据我所知,如果方法签名指定了ref,那么你需要将参数作为ref传递。这样编译器就知道该值需要在传递之前进行初始化,而不是将某些内容传递出去,而是在方法内部进行初始化/分配。
答案 2 :(得分:2)
有没有办法通过不将参数作为ref传递来使用相同的方法(没有重载)
是的,但此功能可能对您没有帮助。
在C#4中,在调用带有可选ref参数的COM对象时使用“ref”是可选的。
这个新功能的原因是因为有许多传统的COM对象是为与VB6一起使用而设计的。 VB6允许您省略ref参数。 C#以前没有,这意味着从C#调用这些方法你必须这样做:
object missing = Type.Missing;
object abc = 10;
foo.Blah(ref missing, ref missing, ref missing, ref abc, ref missing);
呸。在C#4中,您可以简单地说
foo.Blah( whatever : 10 );
并且编译器会为你填写所有参考文献。
此功能仅适用于旧版COM对象,仅适用于C#4。在其他情况下,如果签名需要,您仍需将内容传递为“ref”。
答案 3 :(得分:1)
否......您可能会将要传递的值的副本作为参数复制,以便引用不会修改原始值?