值传递和引用传递

值类型:int double char decimal bool enum struct

引用类型:string 数组 自定义类 集合 object 接口

值传递和引用传递

//值传递和引用传递
int n1=10;
int n2=n1;
n1=20
Console.WriteLine(n1);
Console.WriteLine(n2);
Console.ReadKey();

值类型在复制的时候,传递的是这个值的本身

引用类型在复制的时候,传递的是对这个对象的引用

就是说传递的是堆中的地址,在栈里显示的是堆的地址,然后堆中存的才是那个值,在外面操作这个值的时候,跟他共用的那个也会随着改变

string 的不可变性 每次给string类型的参数赋值时,都会重新开辟空间来进行存储,这是跟别的引用类型不一样的地方,其他的引用类型在首次赋值之后,每次赋值都是改变堆中那个地址的值,而string每次都重新开辟新空间。值类型的赋值以及复制,都是对值进行操作,不是地址。

public class Person()
{
    private string _name;
    public string Name
    {
        get(return _name;)
        set(_name=value;)
    }
    
}
class program
{
    static void Main(string[] args)
    {
        Person p1=new Person();
        p1.Name="张三";
        Person p2=p1;
        p2.Name="李四";
        Console.WriteLine(p1.Name);
        Console.WriteLine(p2.Name);
        Console.ReadKey();
    }
}

答案出来应该是两个李四
static void Main(string[] args)
{
    Person p =new Person;
    p.Name="张三";
    Test(p);
    Console.WriteLine(p.Name);
    Console.ReadKey();

}
public static void Test(Person pp)
{
    Person p=pp;
    p.Name="李四";
}
public class Person()
{
    private string _name;
    public string Name
    {
        get(return _name;)
        set(_name=value;)
    }
    
}
 

 


posted @ 2021-08-09 13:58  静态类  阅读(32)  评论(0编辑  收藏  举报