c# 方法参数与重载 18
一、核心本质
ref和out都是让方法可以修改实参本身(不是拷贝副本),属于引用传递,区别于普通值类型默认的值传递(拷贝一份新数据,方法内修改不影响外面变量)。
二、ref 关键字
1. 规则硬性要求
- 调用方法前,变量必须提前初始化赋值,不能只声明不赋值;
- 方法内部:既可以读取参数原有值,也可以修改参数值;
- 方法结束后,外部实参的值会被同步修改。
3. 记忆点
先赋值,可可读可改。
三、out 关键字
1. 规则硬性要求
- 调用前变量可以只声明、不用初始化赋值;
- 方法执行结束前,必须强制给 out 参数赋值,否则编译报错;
- 方法内一般只用来向外输出结果,不会读取 out 参数传入前的原始值(读也可以,但业务上基本不用);
- 多用于一个方法需要返回多个结果的场景。
- 调用方法的时候需要显示的在参数前面写ref,out。
一、核心定位
in和ref、out同属按引用传递参数,但它是只读引用,作用:以引用方式传参,避免值类型大结构体拷贝开销,同时强制方法内不能修改传入的参数,保证数据安全。
三者核心一句话区分
ref:可进可改,传入有初始值,方法能读能改外部变量out:只出不进,传入可无初始值,方法必须赋值才能传出in:只进不改,传入必须有初始值,方法只能读取,绝对不能修改
二、硬性语法规则
- 调用前实参必须提前初始化赋值,和
ref要求一致,不能像 out 一样只声明不赋值; - 方法内部只允许读取该参数,任何赋值、修改操作都会直接编译报错;
- 本质传递的是变量内存地址,不会对值类型做拷贝,适合体积很大的
struct结构体传参,节省内存与性能。
params=parameter array,中文标准叫法:参数数组。
二、核心作用
让一个方法最后一个形参可以接收任意多个同类型参数(0 个、1 个、多个、直接传数组都行),简化多参数传参写法,不用手动封装数组再传入。
三、硬性语法铁则(必记,编译强制检查)
- 一个方法最多只能有 1 个 params 参数;
- params 必须是形参列表里最后一个参数,后面不能再跟任何其他参数;
- params 只能修饰一维数组,不能是多维数组、List、class 等其他类型。
方法重载:
C# 方法重载(Method Overload)超全知识点
一、什么是方法重载
在同一个类中,方法名完全相同,但是参数列表不一样,编译器可以根据传入实参的数量、类型、顺序自动匹配调用对应方法,就叫方法重载。
核心目的:同一个功能逻辑,适配多种传参形式,不用起多个不同方法名,简化调用。
二、构成重载的硬性必要条件(缺一不可)
1. 必须满足
- 同一个 class 类里面;
- 方法名称必须一模一样;
- 参数列表必须有区别(下面任意一种就算参数不同):
- 参数个数不一样
- 参数数据类型不一样
- 参数顺序不一样(不同类型参数调换顺序)
2. ❌ 绝对不能作为重载区分依据(易错考点)
- 仅返回值不同,不算重载
csharp
运行
int Test(){return 1;} void Test(){} // 报错!仅返回值区别,编译器无法区分调用哪个,不构成重载- 仅参数名字不一样,不算重载
csharp
运行
void Fun(int a){} void Fun(int b){} // 两个完全一样,参数名只是形参别名,编译报错重复定义- 访问修饰符(public/private/static)单独差异,不能单独构成重载
