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

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.xdnf.cn/news/15607.html

相关文章:

  • 测试学习之——Pytest Day3
  • 支付宝智能助理用户会话实时统计:Flink定时器与状态管理实战解析
  • Adam优化器
  • IMU噪声模型
  • 【数据结构】链表(linked list)
  • PostgreSQL 中的 pg_trgm 扩展详解
  • 命名实体识别15年研究全景:从规则到机器学习的演进(1991-2006)
  • Python 基础语法与数据类型(十三) - 实例方法、类方法、静态方法
  • SAP-ABAP:SAP的‘cl_http_utility=>escape_url‘对URL进行安全编码方法详解
  • Linux Swap区深度解析:为何禁用?何时需要?
  • 【程序地址空间】虚拟地址与页表转化
  • 基于Rust游戏引擎实践(Game)
  • 线上项目https看不了http的图片解决
  • 在分布式系统中,如何保证缓存与数据库的数据一致性?
  • docker 容器无法使用dns解析域名异常问题排查
  • springboot 整合spring-kafka客户端:SASL_SSL+PLAINTEXT方式
  • LeetCode20
  • 边界路由器
  • Baumer工业相机堡盟工业相机如何通过YoloV8模型实现人物识别(C#)
  • 如何做好DNA-SIP?
  • Redis完全指南:从基础到实战(含缓存问题、布隆过滤器、持久化及Spring Boot集成)
  • 数据结构 栈(2)--栈的实现
  • 4.PCL点云的数据结构
  • 「Chrome 开发环境快速屏蔽 CORS 跨域限制详细教程」*
  • springboot跨域问题 和 401
  • 人工智能基础知识笔记十四:文本转换成向量
  • Android 实现:当后台数据限制开启时,仅限制互联网APN。
  • 什么是“数据闭环”
  • Docker-Beta?ollama的完美替代品
  • MySQL高可用集群架构:主从复制、MGR与读写分离实战