我有一个关于下面给出的方法重叠的问题 Fun1(int a); Fun1(ref int a);
这种方法是否重载?如果是,那么为什么,如果否,那么为什么?
答案 0 :(得分:1)
根据文件:
当一个方法具有ref或out参数而另一个方法具有值参数
时,方法可以重载
所以问题的答案是肯定的,但为什么呢?
根据函数重载的定义:
函数重载(也称为方法重载)是一种编程概念,它允许程序员定义两个或多个具有相同名称和相同范围的函数。每个函数都有一个唯一的签名(或标题),它来自:
当你在不使用ref关键字的情况下传递参数时,实际上是在传递对变量的引用,因此参数的类型与不使用ref关键字传递的参数类型不同。
public void function(ref int abc)
{
Console.WriteLine("Result Ref: " + abc);
}
public void function(int abc)
{
Console.WriteLine("Result: " + abc);
}
因此上述两个函数的签名与传递给两者的参数类型不一样。
希望我能用我的答案满足你:)。
另外,我想在讨论中添加另一个观点,即在使用一个函数并使用另一个函数的情况下不能进行重载,因为在这种情况下两个类型都被认为是相同的,因此在下列情况下不会出现重载:
public void function(ref int abc)
{
Console.WriteLine("Result Ref: " + abc);
}
public void function(out int abc)
{
abc = 1221;
Console.WriteLine("Result Out: " + abc);
}
答案 1 :(得分:0)
1) Fun1(int a);
2) Fun1(ref int a);
1和2是不同的功能。 1 - 按值传递,2 - 按引用传递。
例如:
public static void Func(int i)
{
i++;
Console.WriteLine("int a = {0}", i);
}
public static void Func(ref int i)
{
i++;
Console.WriteLine("ref int a = {0}", i);
}
static void Main(string[] args)
{
int a = 9;
Func(ref a);
// Func(a);
Console.WriteLine("a = {0}", a);
Console.Read();
}
输出:
ref int a = 10
a = 10
表示a
通过引用传递,函数Func(ref int i)
可以更改其值。
第二种情况,当您在Func(a)
功能结果中调用Main
时:
int a = 10
a = 9
这意味着a
按值传递。
您可以在一个类中实现这两个函数。