c# value、ref、out
一、参数传递
- 方式一:By value 将实参复制一份给形参,函数内对形参进行操作,对形参(复制值)的操作对实参无影响。
- 方式二:By reference 传递实参内存地址,函数内对地址所在内存进行操作,对形参(引用值)的操作会改变实参。
- 方式三:By Output out参数不会在函数内被调用。它将函数内部的参数传递出来,而不是将形参传入函数进行调用。在需要几个返回值时,它会很有用。
static void GetValues(out int x, out int y) { x = 5; y = 42; } static void Main(string[] args) { int a, b; GetValues(out a, out b); //Now a equals 5, b equals 42 }
static void Ask(out string name) { name = Console.ReadLine(); } static void Main(string[] args) { string nm; Ask(out nm); }
二、value及reference存储形式
- value类型
内置类型,如int和double,其值被存储与栈内。
栈存储value类型和static变量和方法。
- ref类型
reference类型用于存储对象(objects)。当实例化一个对象时,对象按引用类型存储:对象数据存储于堆内,此对象所在堆地址存储在栈内。
- 小结
- 当我们把一个value类型的值作为参数传递时,在函数内操作的是value类型值的副本。因此形参的改变不会对实参产生影响(除非加上关键字ref,传递引用)。
- 当我们把reference类型的值作为参数传递时,在函数内对参数的操作通过指针(如图中p1)直接改变了内存。因此形参的改变直接对形参产生了影响。
- static对象和方法属于当前类,而不是一个特定的(new出来的)实例。
内容总结自 https://www.sololearn.com/Play/CSharp#
posted on 2018-01-15 10:34 workhardplayhard 阅读(236) 评论(0) 编辑 收藏 举报