C# 方法内的参数 引用类型与值类型的一些理解
来源:互联网 发布:镜片蓝膜绿膜区别 知乎 编辑:程序博客网 时间:2024/05/29 17:39
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,先这些了。
阅读全文
1 0
- C# 方法内的参数 引用类型与值类型的一些理解
- C#的值类型与引用类型
- 理解C#值类型与引用类型
- 理解C#值类型与引用类型
- 理解C#值类型与引用类型
- 理解C#值类型与引用类型
- 理解C#值类型与引用类型
- 理解C#值类型与引用类型
- 理解C#值类型与引用类型
- 理解C#值类型与引用类型
- 理解C#值类型与引用类型
- 理解C#值类型与引用类型
- 理解C#值类型与引用类型
- 理解C#的值类型和引用类型
- C# 中堆栈,堆,值类型,引用类型的理解
- C#值类型和引用类型的深入理解
- C#值类型和引用类型的深入理解
- C#值类型和引用类型的深入理解
- stdout和stderr关于缓冲区的浅解
- 操作系统实验之最近最久未使用算法(LRU)模拟
- C语言程序设计(29)
- txwifinatwfp64.sys导致蓝屏
- java 回调机制分为:异步回调 同步回调
- C# 方法内的参数 引用类型与值类型的一些理解
- 343. Integer Break(第十四周)
- A4纸的像素和分辨率
- 2017第八届蓝桥杯决赛_观光旅游
- mysql 多表查询
- JVM调优
- 数学分析八讲笔记(四)
- python中的类中属性元素加self.和不加self.的区
- 笑笑