C#_02 参数应用2

一、关于 “ref” 局部变量和 “ref” 返回

  • 在前面已经明白了 ref 关键词传递一个对象引用给方法调用,这样在方法中对对象修改过后返回后依然可见,而 ref 返回却相反,它允许你将引用发送到方法外,然后在调用的上下文使用这一引用。而与之相关的是ref局部变量,先从ref局部变量开学习
  • 下面先从 ref 局部变量开始:
    • 它允许一个变量是另一个变量的别名
    • 对任意一个变量的修改都会反映到另一个上
    • 创建别名语法: ref int y = ref x;(在这里y是x的别名)
  • 代码示例:
    Class Program
{
Static Void Main()
{
int x = 5;
ref int y = ref x;
Console.WriteLine($” x : {x} , y : {y} ”);
y=7;
Console.WriteLine($” x : {x} , y : {y} ”);
X=9;
Console.WriteLine($” x : {x} , y : {y} ”);
//输出结果为
//5 5
//7 7
//9 9
}
}
  • 但是别名功能并不是 ref 局部变量的一个常见用途,实际上它经常与 ref 返回一起使用,ref 返回提供了一种方法使得方法返回值返回变量引用而非变量值
  • 具体用法:会使用两次 ref 关键词
    • 一次是位于方法返回类型声明之前
    • 二次是在 return 关键词之后,被返回对象之前
  • 代码示例:
    Class Simple
{
private int x = 50;
public ref int RefGet()
{
return ref x;
}
public void Display()
{
Console.WriteLine($”Value : {x}”);
}
}
Class Program
{
Static Void Main()
{
Simple s = new Simple();
s.Display();
ref int q=s.RefGet();
q+=2;
s.Display();
//运行结果为 value:50
// value:52
}
}
  • 这里另一个比较经典的例子就是返回 MAX ,在返回时想要返回最大值的引用而非最大值的值,这里就可以使用 ref
  • 代码示例(缩略)
    Class Max
{
Public ref int GetMax(ref int x,ref int y)
{
return ref x>ref y;
}
}
Class Program
{
Static void Main()
{
int x=20,y=10;
Max D = new Max();
ref int max = D.GetMax(ref x,ref y);
max++;
Console.WriteLine($”max : {max}”);
}
}

二、命名参数

  • C#允许我们使用命名参数,只要显式指定名字,就可以按任意顺序在方法调用中列出参数

  • 格式:(这里 a ,b ,c 是三个形参)

    • c.Cale(c:2,a:5,b:4);
  • 代码示例:

    Class Program
{
public int Cale(int a, int b, int c)
{
return a+c*b;
}
static void Main()
{
int r1=Cale(c:4,a:2,b:4);
int r2=Cale(a:2,c:4,b:4);
int r3=Cale(2,c:4,b:4);
}
}

三、可选参数:(没什么可说的)

  • 在方法中提供默认值
  • 示例:
    public int Cale(int a,int b,int c=3)
{
return a+b*c;
}
Static void Main()
{
int a=2,b=4,c=4;
Console.WriteLine($” {Cale(a,b)} {Cale(a,b,c)} ”);
}

最新文章

  1. HD1385Minimum Transport Cost(Floyd + 输出路径)
  2. 有时候dfs可以简化各种组合的操作
  3. List.Select按字符串选择属性
  4. Java连接Sql Server2008
  5. 你想不到的IT运维前途
  6. openStack juno for ubuntu12-04
  7. SVN - 笔记
  8. OpenCV探索之路(五):图片缩放和图像金字塔
  9. jsp+struts2登录框架模板
  10. Jmeter接口测试操作
  11. leetcode刷题五<最长回文子串>
  12. 使用kettle来根据时间戳或者批次号来批量导入数据,达到增量的效果。
  13. APICloud · 跨越2018,技术改变世界
  14. Conccrent中 Unsafe类原理 以及 原子类AutomicXX的原理以及对Unsafe类的使用
  15. Codeforces Round #459 Div. 1
  16. php curl函数采集网页出现gzip压缩、编码不同导致的乱码 图文解决方法
  17. Servlet笔记8--乱码解决方案
  18. MySQL 5.6.10 跨平台GTID复制实践
  19. 快速排序(Quicksort)的Javascript实现(转载)
  20. 图形管线之旅 Part2

热门文章

  1. linux 安装redis及问题收集
  2. 清北学堂 2020 国庆J2考前综合强化 Day7
  3. 【Azure 应用服务】部署Kafka Trigger Function到Azure Function服务中,解决自定义域名解析难题
  4. Java面试题(四)--RabbitMQ
  5. 【面试题】纯css实现三角形,你知道如何实现吗?
  6. ajax.readyState与ajax.status一览
  7. Luogu4391 [BOI2009]Radio Transmission 无线传输 (KMP)
  8. React报错之JSX element type does not have any construct or call signatures
  9. java-前端之js
  10. 计算机网络-DNS和HTTPDNS了解