繁体   English   中英

当参数是C#中的值或引用类型时调用函数?

[英]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关键字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)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM