了解 C# 中的方法机制

本文关键字:方法 机制 了解 | 更新日期: 2023-09-27 18:34:09

为什么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;
    }
}

了解 C# 中的方法机制

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

为了修改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 ,而是返回单个值。尽管在这种情况下不清楚您的意图,但请选择有效的方法。

简短

的回答是...我并没有真正传递给你的类函数。 发送 I 的副本。 必须显式告知 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;
    }
}