type
status
date
slug
summary
tags
category
icon
password
Property
Aug 14, 2023 11:59 AM
本节内容
传值参数
输出参数
引用参数
数组参数
具名参数
可选参数
扩展方法(this参数)
传值参数

传值参数→值类型

注意
- 值参数创建变量的副本
- 对值参数的操作永远不影响变量的值
传值参数→引用类型,并且创建新对象

注意
- 值参数创建变量的副本
- 对值参数的操作永远不影响变量的值
传值参数→引用类型,只操作对象,不创建新对象

注意
- 对象还是那个对象,但对象里的值(字段/属性)已经改变
引用参数

引用类型→值类型

注意
- 引用参数并不创建变量的副本
- 使用ref修饰符显示指出–此方法的副作用是改变实际参数的值
引用参数->引用类型,创建新对象

注意
- 引用参数并不创建变量的副本
- 使用ref修饰符显示指出–此方法的副作用是改变实际参数的值
引用参数→引用类型,不创建新对象只改变对象的值

注意
- 此时与传值参数在效果上并无不同,但机理不一样,有些面试题会考到
传值会创建副本,是两个不同的变量,但是指向的堆内存地址是一样的。
引用传值不会创建副本,是同一个变量,内存地址一样的,指向的堆内存地址是一样的
输出参数
带有输出参数的方法,一定具有副作用,获得除返回值之外的额外输出

输出参数→值类型

注意
- 输出参数并不创建变量的副本
- 方法体内必须要有堆输出变量赋值的操作
- 使用out修饰符显式指出–此方法的副作用是通过参数向外输出值
- 从语义上来讲–ref是为了“改变”,out是为了“输出”
使用输出参数的实例
输出参数→引用类型

注意
- 输出参数并不创建变量的副本
- 方法体内必须要有堆输出变量赋值的操作
- 使用out修饰符显式指出–此方法的副作用是通过参数向外输出值
- 从语义上来讲–ref是为了“改变”,out是为了“输出”
数组参数
必须是形参列表中的最后一个,有params修饰
举例:String.Format方法和String.Split方法
具名参数
参数的位置不再受约束
优点:
- 提高代码的可读性
- 加上名字之后,参数位置不受约束
可选参数
参数因为具有默认值而变得“可选”
不推荐使用可选参数
扩展方法(this参数)
方法必须是公有、静态的,即被public static所修饰
必须是形参列表中的第一个,由this修饰
必须有一个静态类(一般类名为SomeTypeExtension)来统一收纳堆SomeType类型的扩展方法
举例:LINQ方法
各种参数的使用场景总结
传值参数:参数的默认传递方式
输出参数:用于出返回值外还需要输出的场景
引用参数:用于需要修改实际参数值的场景
数组参数:用于简化方法的调用
具名参数:提高可读性,参数顺序不受约束
可选参数:参数拥有默认值
扩展方法(thsi参数):为目标数据类型“追加”方法
- 作者:Kitety
- 链接:https://www.kitety.com/article/C-sharp-leraning-method
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章