2014-08-30 61 views
1

我是一个意大利人,对不起我的英语不好!我希望知道是否有方法通过引用或按值传递参数。C#同样的方法,但不同的参数:与参考和没有

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

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

这另一种方法

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

有一种方式来获得相同的结果,但没有使用相同的创建两个不同的方法身体?我需要它,因为有些时候我想要使用“方法”的副作用,有时我希望a不会被修改!

非常感谢!

+1

如果方法具有相同的身体,你必须不是使用'a'是'ref'参数的事实,那么为什么包含这个版本呢? – 2014-08-30 15:30:44

+1

@安德鲁,这不是真的;你总是可以修改一个参数值 - 有趣的问题是:**调用者**看到了变化。这不会影响方法主体 – 2014-08-30 15:40:21

+0

@MarcGravell:这是真的,我想,好点。 – 2014-08-30 17:02:53

回答

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

感谢您的回答,我在提出这个问题3秒后想到了相同的解决方案(但在15分钟后,我问了这个问题,思考如何解决这个问题) – TwistAndShutter 2014-08-30 15:48:21

+0

注意:这可能不适用于某些不爱的语言超负荷仅在ref - VB,IIRC – 2014-08-30 15:49:54

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

荫不知道你为什么要这么做..但你可以通过

    做的一种方式
  1. 添加一个参数布尔标志来修改或不对以下内容

公共mehtod(参考INT一个,布尔修改)

然后在它里面,如果修改传递是假,则内部声明一个新的变量并分配唯一的值,并用它 如int B = A; 和使用在端部B进行处理基于在更新参考变量或离开它

1

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

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

有了:

Method(a); 

Vs的

a = Method(a);