1.值传递(默认)
x 是 a 的副本,方法内部修改不会影响外部
cs
public static void Change(int x)
{
x = 100;
}
static void Main()
{
int a = 10;
Change(a);
Console.WriteLine(a); // 输出:10(不变)
}
2.引用传递ref
cs
public static void Change(ref int x)
{
x = 100;
}
static void Main()
{
int a = 10;
Change(ref a);
Console.WriteLine(a); // 输出:100
}
3.输出参数out
cs
public static void GetValue(out int x)
{
x = 200; // 必须赋值
}
static void Main()
{
int a; // 可不赋值
GetValue(out a);
Console.WriteLine(a); // 输出:200
}
4.只读引用in
cs
public static void Show(in int x)
{
// x = 100; // ❌ 不能修改
Console.WriteLine(x);
}
5.引用类型也可以值传递
变量 p 是 p1 的副本,修改副本不会改变原变量引用。
cs
public static void ChangeName(Person p) //p是引用的副本,copy了p1对象的内存地址
{
p = new Person("Jack"); // p指向了另一个内存地址,不影响原来的p1
}
static void Main()
{
Person p1 = new Person("Tom");
ChangeName(p1);
Console.WriteLine(p1.Name); // 输出:Tom
}
7.修改对象的内部内容(而不是副本本身)
修改引用类型对象内部内容 → 会影响外部
cs
public static void ChangeName(Person p) //p是引用副本,copy了p1对象的地址
{
p.Name = "Jack"; // 通过副本修改原对象的内容
}
static void Main()
{
Person p1 = new Person("Tom");
ChangeName(p1);
Console.WriteLine(p1.Name); // 输出:Jack
}
8. ref
cs
public void ChangeName(ref Person p)
{
p = new Person("aaaa", 15);
}
public void test()
{
Person p1 = new Person("Tom", 20);
ChangeName(ref p1);
Console.WriteLine(p1.Name); // aaaa