C#方法相同,但参数不同:有ref和没有ref

本文关键字:ref 参数 方法 | 更新日期: 2023-09-27 18:20:01

我是个意大利人,很抱歉我的英语不好!我想知道是否有一种方法可以随时使用通过引用或通过值传递参数的方法。

例如,如果我想要这种方法:

public mehtod (ref int a)
{
    //do some stuff
}

而另一种方法

public method (int a)
{
    //do the same stuff of method(ref int a)
}

有一种方法可以获得相同的结果,但不需要用相同的身体创造两种不同的方法?我需要它,因为有时我想在使用"方法"时产生副作用,有时我想不修改!

非常感谢!

C#方法相同,但参数不同:有ref和没有ref

您可以简单地从第二个方法中调用第一个方法:

public void method (ref int a)
{
    //do some stuff
}
public void method(int a)
{
    method(ref a);  //do the same stuff of method(ref int a)
}

如果返回类型为void,则可以将其更改为返回修改后的值,而不是使用ref。然后调用者可以忽略返回值或使用返回值,因为他们选择:

int Method(int foo) {
   // ...
   foo = ...
   // ...
   return foo;
}

带有:

Method(a);

a = Method(a);

我不确定你为什么要这么做。。但是有一种方法你可以通过

  1. 向以下内容添加一个要修改或不修改的参数布尔标志

public mehtod(ref int a,bool modify)

然后在内部,如果传递的modify为false,则在内部声明一个新变量并只分配值并使用它像int b=a;并使用b在最后根据您更新ref变量的标志进行处理,或将其保留为

   static void callingMethod()
    {
        int a = 0;
        method(a); // original a is not modified
        // or
        method(ref a); // a is modified
    }
    static void method(int a)
    {
        method(ref a);
    }
    static void method(ref int a)
    {
        // do stuff
    }