[英]Calling functions when parameter is value or reference type in C#?
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);
}
}
您将看到第一个调用将打印'无参考',第二个调用将打印'与参考'。 你自己可以做到这一点。
手册说完全可能:
但是,当一个方法具有ref或out参数而另一个方法具有值参数时,可以执行重载,如以下示例所示。
class RefOverloadExample { public void SampleMethod(int i) { } public void SampleMethod(ref int i) { } }
new A().methodA(a);
将调用非ref
版本。
new A().methodA(ref a);
将调用ref
版本。
在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)
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.