理解C#中的方法机制?

Pho*_*int 0 c# methods

i当我将它传递给方法时为什么不改变?i方法调用之后的值是0,但方法仍然返回101.

class Program
{
    static void Main(string[] args)
    {
        int i = 0;
        Console.WriteLine("Before static method running i={0}", i);
        int c=   SampleClass.ExampleMethod( i);
        Console.WriteLine("i={0} - Static method return c={1}",i,c);
    }
}

class SampleClass
{
    public static int ExampleMethod(int i)
    { 
    i= 101;
    Console.WriteLine("Inside static method i={0}",i);
    return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

Cyr*_*ral 5

在C#中,值类型(ints,doubles等,按值传递,而不是引用.)

要修改其值i,必须使用ref关键字.

class Program
{
    static void Main(string[] args)
    {
        int i = 0;
        int c=   SampleClass.ExampleMethod(ref i);
        Console.WriteLine("i={0} - c={1}",i,c);
    }
 }

class SampleClass
{
    public static int ExampleMethod(ref int i)
    {
        i = 101;
        return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

通常,最好不要使用ref,而是返回单个值.虽然在这种情况下,你的意图并不清楚,所以请继续使用.

  • 这个答案是对的.*如果不添加ref关键字,则所有*类型都按值传递.这就是ref关键字的重点. (2认同)