同样的方法可以使用和不使用ref?

时间:2010-02-10 06:50:01

标签: c#

我有一个方法,它接受ref参数。有没有办法使用相同的方法(没有重载)没有传递参数为ref?

4 个答案:

答案 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)

否......您可能会将要传递的值的副本作为参数复制,以便引用不会修改原始值?