引用传递问题

来源:互联网 发布:北京大数据公司 编辑:程序博客网 时间:2024/05/06 07:16

using System;public class Test1{    public static void Main()    {        int num = 0;        Person p = new Person("Li");        A1(p, num);        Console.WriteLine("{0},{1}", p.name, num);    }    static void A1(Person p, int num)    {        p = new Person("Wang");        num = 1;    }}public class Person{    public string name;    public Person(string name)    {        this.name = name;    }}


其实这两个参数都是值传递,num就不用说了,它是值类型,所以传递到方法中的是它的副本,而p是引用类型,但是它没有加ref或者out,所以它是以值传递引用类型,引用类型的变量不直接包含其数据;它包含的是对其数据的引用。当通过值传递引用类型的参数时,有可能更改引用所指向的数据,如某类成员的值。但是无法更改引用本身的值;也就是说,不能使用相同的引用为新类分配内存并使之在块外保持。

在楼主的示例中,p为引用类型,在未使用 ref 参数的情况下传递给方法A1。在此情况下,将向方法传递指向p的引用的一个副本。但是在A1方法中使用 new 运算符来分配新的内存部分,将使A1中的p引用新的Person,因此,这之后的任何更改都不会影响原始Person p(它是在 Main 内创建的)。实际上,本示例中创建了两个Person对象,一个在 Main 内,一个在 A1 方法内
原创粉丝点击