了解 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# 中,值类型(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;
}
}