1
public class A
{
void methodA(int a){}
void methodA(ref int a){}
}

 static void Main()
  {
    int a=1;
    new classA().methodA(a);
  }

在 Main 类中,调用了哪个方法?A类中的方法是否被重载?可以基于值或参考参数进行覆盖吗?请帮我说清楚。

4

5 回答 5

3

修复代码后:

public class ClassA
{
    public void methodA(int a) 
    {
        Console.WriteLine("Without ref");
    }

    public void methodA(ref int a) 
    {
        Console.WriteLine("With ref");
    }
}

class Program
{
    static void Main(string[] args)
    {
        int i = 1;
        var a = new ClassA();

        a.methodA(i);
        a.methodA(ref i);

        Console.ReadKey(true);
    }
}

您会看到第一个调用将打印“Without ref”,第二个调用将打印“With ref”。你本可以自己做的。

手册说这是完全可能的:

但是,当一个方法具有 ref 或 out 参数而另一个具有 value 参数时,可以进行重载,如下例所示。

class RefOverloadExample
{
    public void SampleMethod(int i) { }
    public void SampleMethod(ref int i) { }
}
于 2012-10-04T07:12:35.580 回答
1
new A().methodA(a); 

将调用非ref版本。

new A().methodA(ref a); 

将调用ref版本。

于 2012-10-04T07:12:01.420 回答
0
public class A
{
void methodA(int a){}
void methodA(ref int a){}
}

 static void Main()
  {
    int a=1;
    new classA().methodA(a);
    new classA().methodA(ref a)//You can add this to see the difference

  }

两者都是不同的...

new classA().methodA(a);
new classA().methodA(ref a)
于 2012-10-04T07:28:02.133 回答
0

在 C# 中,您必须明确说明您是否通过引用传递。

以下调用不同

int a = 5;
methodA(a);
methodA(ref a );
于 2012-10-04T07:14:01.350 回答
0

ref 关键字 MSDN

当一个方法具有 ref 或 out参数而另一个具有 value 参数时,可以进行重载,如下例所示

在您的情况下,它不会调用methodA(int a){}带有 ref 的那个。

你的班级应该是:

public class A
{
    public void methodA(int a) 
    { 
    }
    public void methodA(ref int a) 
    { 
    }
}

如果要使用ref关键字调用重载方法,则需要ref在方法调用中指定。喜欢:

int a = 1;
A classAObj = new A();
classAObj.methodA(ref a);

上面的代码将解析为重载methodA(ref a)

于 2012-10-04T07:14:31.163 回答