当前位置: 首页 > news >正文

c#笔记之方法的形参列表以及方法重载


学习内容:

方法的形参各种形式,形参就是方法括号里的如public void Funt(int x)里的x;

一、传值参数

本质就是创建一个副本来操作副本

1.1值类型

给方法传值的参数如下面例子里的x;在方法内部对传进来的参数进行操作不会影响,操作完之后y依旧是40,因为在方法里操作的是传进来变量的副本

public void TestFunt(int x)
{
x+=1;
}int y=4;
TestFunt(y);

1.2引用类型(不推荐使用这种情况)

引用类型因为引用类型里存的不是直接的值而是地址所以传入方法之后方法里的地址指向的还是同一个对象,所以这时候修改会改变传入的对象里的值;下面的例子在执行方法test2之后stu1的name是11;因为输入的是副本所以是两个地址;但是地址里的值都是同一个实例在堆上的地址所以操作会改变实例stu1的name属性;

class Student
{
public string name{get;set;}
}public void TestFunt(Student stu){
stu.name=“11”;
}public void test2()
{
Student stu1 = new Student();
stu1.name="22";
TestFunt(stu1);}

二、引用参数(ref)

引用参数和上面的传值参数的区别就是不创建副本;

因为不创建副本所以在方法里修改会直接改变方法外的值,如下面例子里的x,在方法test后变成3;声明方法时和使用方法时都要加上ref关键字

public void Funt()
{
int x=2;
test(ref x);
}public void test(ref int y)
{
y+=1;
}

三、输出参数(out)

和引用参数一样都是不创建副本;

如下面例子里的x,在方法test后变成3;声明方法时和使用方法时都要加上out关键字;

public void Funt()
{
int x=2;
test(out x);
}public void test(out int y)
{
y=3;
}

四、out和ref的区别

4.1使用场景不同

ref一般用于修改某个值的时候会用;out则是要输出某个值的时候;

因为ref是修改是在值上修改所以在方法外要明确值不然修改什么;在方法结束的时候也可以不修改赋值;out是输出原本的值无所谓,所以在方法外可以不用明确值但是结束的时候一定要赋值;

public void RefFunt(ref int x)
{//可以不对x操作
}public void OutFunt(out int y)
{int y=4;//明确修改
}public void Test()
{
int iTest = 4;//明确值
RefFunt(ref iTest);int iTest1;//可以不用明确值
OutFunt(out iTest1);}

五、数组参数(params)

有一个方法要一个int数组参数
public void Funt(int[] x)
{}public void test()
{int[] yy = new int[3] { 1,2,3};
Funt(yy);
}

可以使用params

public void Funt(params int[] x)
{}public void test()
{
//可以使用旧形式int[] yy = new int[3] { 1,2,3};
Funt(yy);//还可以用新方法
Funt(1,2,3);
}

形参列表不止一个的时候,数组参数必须要在形参列表的最后一个并且只能有一个,下面的4就是形参c,后面多出来的1,2,3系统默认属于数组int[]x。

public void Funt(string te,int c,params int[] x)
{}public void test()
{
Funt(“yy”,4,1,2,3);
}

六、具名参数

具名参数其实不是一种形参参数而是一种使用方法;可以不用在意参数具体位置,

public void Funt(string te,int c)
{}public void test()
{
Funt(c:5,te:“yy”);//可以吧形参te和c的位置反过来因为前面有参数的名字
}

七、方法重载(this)

方法重载是对类添加一个方法适用与类的代码不在自己手里但是要添加一个方法的情况;

exp:比如有一个Student类要添加一个方法

  1. 先创建一个静态类(约定俗成Extensions结尾)
  public class Student{public string strName;
}public static class TestExtensions{public static void testexFunt(this Student stu, int a){Console.WriteLine(stu.strName);Console.WriteLine(a.ToString());}}

2.创建一个静态方法第一个形参要添加this,this后面加要添加这个方法的类如例子里是Studen这个类;注意this形参只能是第一个并且不能用ref或者out;其他的就和正常方法的形参一样,

学习时间:

25.07.17


http://www.lryc.cn/news/591635.html

相关文章:

  • ubuntu22 npm install electron --save-dev 失败
  • 设计模式是什么呢?
  • JAVA后端开发——success(data) vs toAjax(rows): 何时用
  • .NET Core EFCore零基础快速入门简单使用
  • MyUI1.0全新现代化 Vue.js 组件库框架上线
  • Bell不等式赋能机器学习:微算法科技MLGO一种基于量子纠缠的监督量子分类器训练算法技术
  • mongodb-org-server_8.0.11_amd64.deb 这个文件怎么安装
  • MySQL配置性能优化
  • 3D材质总监的“光影魔法”:用Substance Sampler AI,“擦除”照片中的光影
  • 云原生技术与应用-Kubernetes架构原理与集群环境部署
  • AI驱动,精准计算光伏电站每一小时的发电量
  • Android设备标识符详解:IMEI、ANDROID_ID与OAID
  • 深度解析:基于EasyX的C++黑白棋AI实现 | 算法核心+图形化实战
  • 当下主流摄像头及其核心参数详解
  • Python22 —— 标准库(random库)
  • InfluxDB 3与Apache Parquet:打造高性能时序数据存储与分析解决方案
  • CISP-PTE 练习题(完整一套)
  • 专业云端视觉计算解决方案:云渲染云电脑
  • Transformer从入门到精通
  • JxBrowser 8.9.2 版本发布啦!
  • 基于强化学习的人机协同教学角色分配优化与课堂参与度建模研究
  • Ubuntu FTP服务搭建与配置
  • Qt软键盘
  • Redis学习-03重要文件及作用、Redis 命令行客户端
  • Rabbitmq Direct Exchange(直连交换机)多个消费者,配置相同的key ,队列,可以保证只有一个消费者消费吗
  • IAR编译后处理 并复制日期
  • QT跨平台应用程序开发框架(10)—— Qt窗口
  • 《每日AI-人工智能-编程日报》--2025年7月17日
  • 突破AI模型访问的“光标牢笼”:长上下文处理与智能环境隔离实战
  • 记录timesfm2.0复现及调优