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

时间:2014-08-30 15:23:14

标签: c# methods pass-by-reference pass-by-value

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

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

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

另一种方法

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

有一种方法可以获得相同的结果,但是没有使用相同的主体创建两种不同的方法?我需要它,因为有时候我想要使用“方法”的副作用,有时候我想要a不被修改!

非常感谢你!

4 个答案:

答案 0 :(得分:2)

您只需从第二个方法调用第一个方法:

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)
}

答案 1 :(得分:1)

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

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

使用:

Method(a);

Vs的

a = Method(a);

答案 2 :(得分:0)

   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
    }

答案 3 :(得分:0)

我不确定你为什么要这样做......但是有一种方法可以做到

  1. 添加一个参数布尔标志以修改或不修改以下
  2.   

    public mehtod(ref int a,bool modify)

    然后在其内部如果传递的修改为false则在内部声明一个新变量并仅分配该值并使用它 比如int b = a; 并根据更新ref变量的标志使用b进行处理,或者保留