天天看点

C#基础值参数和引用参数的运行原理分析

01传递值类型参数:

值参数是实参的值传递给形参,实质是复制一份实参给形参,不影响在方法调用中的实参的值

C#基础值参数和引用参数的运行原理分析

内存分配图如下

C#基础值参数和引用参数的运行原理分析

02值参数传递引用类型参数:

C#基础值参数和引用参数的运行原理分析

内存原理:在Add方法中形参f拿到了实参a在栈中的副本,副本中存储着对象的地址。所以,f与a指向了同一个对象。

    这时操作的不是副本,而是副本所指的对象,即操作a所指对象

   

C#基础值参数和引用参数的运行原理分析

03值参数引用传递的参数时

C#基础值参数和引用参数的运行原理分析

Add方法中改变了f所指向的对象,指向一个new的student对象,此时a仍指向原对象,这时再对student进行操作,

便不再会影响实参a所指的对象。

C#基础值参数和引用参数的运行原理分析

04.按引用传递参数(引用参数)

 此时不再复制实参在栈中的副本,而是将实参在栈中的地址传给形参,也就是实参与形参共用栈中的值。此时在方法中对形参所 做的任何操作,都会影响实参(说白了就是形参和实参都是同一个)

    按引用传递也分为值类型和引用类型两种情况

    当传递值类型参数时:

    

C#基础值参数和引用参数的运行原理分析

    内存原理:

    

    

C#基础值参数和引用参数的运行原理分析

    当传递值类型参数时:

    

C#基础值参数和引用参数的运行原理分析

    原理图

    

C#基础值参数和引用参数的运行原理分析
C#基础值参数和引用参数的运行原理分析