C#内的方法内的参数有值类型和引用类型的区别
在参数前用ref 或 out修饰后,参数就变为引用类型传递了。
原先赋值过的变量会在调用这个方法后变化。
我的理解是值传递时候,调用方法的参数时候,复制了一份,然后使用。 而引用传递时候,是直接把变量的地址传递给了方法,直接改变那些变量。
参数如果是类、结构体的时候。
用一段测试程序说明下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace yinyongChuangdi
{
class Program
{
static void Main(string[] args)
{
People lisa = new People() { id = 5 };
Console.WriteLine("新建一个People为Lisa");
Console.WriteLine("Lisa的id为:" + lisa.id);
change(lisa);
Console.WriteLine("change后");
Console.WriteLine("Lisa的id为:"+lisa.id);
change2(lisa);
Console.WriteLine("change2后");
Console.WriteLine("Lisa的id为:" + lisa.id);
Console.WriteLine();
Pirate jack = new Pirate() { id = 1 };
Console.WriteLine("新建一个Pirate为jack");
Console.WriteLine("jack的id为:" + jack.id);
cc(jack);
Console.WriteLine("cc后");
Console.WriteLine("jack的id为:" + jack.id);
cc2(jack);
Console.WriteLine("cc2后");
Console.WriteLine("jack的id为:" + jack.id);
Console.ReadLine();
}
static void change(People ll)
{
ll.id = 3;
}
static void change2(People ll2)
{
ll2 = new People();
ll2.id = 2;
}
static void cc(Pirate aa)
{
aa.id = 100;
}
static void cc2(Pirate aa2)
{
aa2 = new Pirate();
aa2.id = 200;
}
}
class People
{
public int id{get;set;}
}
struct Pirate
{
public int id;
}
}
输出结果为:
lisa是一个类,引用类型,
change方法参数是类名,方法体内没有new这个类,它改变了lisa的id。
change2方法内new了下,重新new了一个类,改变id的新建的id。不影响lisa原本id。
jack是个结构体。
从上面看,不管怎么搞,原来是多少,就是多少。
当然, 如果你的结构体内有引用变量的话,这就看你方法体内有没有new了,没new会变,new了就不变。我上面例子里只是个int值变量哦。
你要加了ref的话,那都会变啦。
ok,先这些了。