理解C#中的方法机制?

时间:2014-12-13 03:19:13

标签: 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; } }

{{1}}

2 个答案:

答案 0 :(得分:5)

在C#中,值类型(int s,double等等按值传递,引用。)

要修改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;
    }
}

通常,最好不要使用ref,而是返回单个值。虽然在这种情况下你的意图并不清楚,但那么有效的方法。

答案 1 :(得分:3)

简短的回答是......我并没有真正传递给你的班级功能。发送一份我的副本。您必须明确告诉C#在内存中发送实际值而不是副本。您可以使用“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);
        Console.ReadLine();
    }

}

class SampleClass
{
    public static int ExampleMethod( ref int i)
    {
        i = 101;
        return i;
    }
}