public class A
{
void methodA(int a){}
void methodA(ref int a){}
}
static void Main()
{
int a=1;
new classA().methodA(a);
}
在 Main 类中,调用了哪个方法?A类中的方法是否被重载?可以基于值或参考参数进行覆盖吗?请帮我说清楚。
public class A
{
void methodA(int a){}
void methodA(ref int a){}
}
static void Main()
{
int a=1;
new classA().methodA(a);
}
在 Main 类中,调用了哪个方法?A类中的方法是否被重载?可以基于值或参考参数进行覆盖吗?请帮我说清楚。
修复代码后:
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) { } }
new A().methodA(a);
将调用非ref
版本。
new A().methodA(ref a);
将调用ref
版本。
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)
在 C# 中,您必须明确说明您是否通过引用传递。
以下调用不同
int a = 5;
methodA(a);
methodA(ref a );
当一个方法具有 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)