黑马程序员技术交流社区
标题:
c#中引用类型参数传递的方式
[打印本页]
作者:
黑马刘俊
时间:
2013-1-23 13:46
标题:
c#中引用类型参数传递的方式
C#中有两种参数传递的方式,值传递和引用传递,他们之间有什么区别呢
1、按值传递引用类型:参数的默认传递方式,按值传递引用类型时,我们传递给方法的是一个对象的引用值,通过这个引用值我们可以修改源对象的状态,也就是字段于属性的值,但不可以改变这个引用所指向的对象
2、按引用传递引用类型,也就是我们使用ref关键字来传递参数,这时候我们不仅可以修改源对象的状态,还可以改变这个引用所指向的对象
class Person
{
public string name;
public int age;
public Person ( )
{
}
public Person(string name,int age)
{
this.name=name;
this.age=age;
}
static void Main ( string[] args )
{
Person p1 = new Person ( "lily", 15 );
setPerson ( p1 );
Console.WriteLine ( "{0},{1}", p1.name, p1.age );
setPerson ( ref p1 );
Console.WriteLine ( "{0},{1}", p1.name, p1.age );
Console.ReadKey ( );
}
public static void setPerson (Person p ) //按值传递
{
p.age = 10;
p = new Person ( "tom", 20 );
}
public static void setPerson ( ref Person p )//按引用传递
{
p.age = 10;
p = new Person ( "tom", 20 );
}
}
复制代码
对于上面这个例子,当我们执行setPerson ( p1 )方法时,传递的是p1的引用值,所以代码中的p.age=10会成功修改我们传入的p1对象的年龄,但是下面的p = new Person ( "tom", 20 )代码会没有效果,因为我们不能将另外的对象引用赋值给P。
当执行setPerson ( ref p1 )时,我们实际上是直接在p1上进行操作,所以,p.age = 10;p = new Person ( "tom", 20 );两句代码都会得到正确的执行。
所以Main()方法的执行结果应该是
lily,10
tom,20
作者:
许庭洲
时间:
2013-1-23 13:55
值得学习ing!
作者:
郑朝明
时间:
2013-1-23 19:47
值类型就是现金,要用直接用;引用类型是银行卡,平时看到的就是一串号码。要用还得先去银行取现
作者:
肖健
时间:
2013-1-24 09:44
建议楼主可以补充一下out的使用~~ ref和out比较使用,此贴会更加全。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2