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

索引网站有哪些徐州seo外包平台

索引网站有哪些,徐州seo外包平台,做网站猫要做端口映射吗,来个网站吧好人一生平安2022总目录 前言 在 C# 编程中,ref 和 out 是两个非常重要的关键字,它们都用于方法参数的传递,但用途和行为却有所不同。今天,我们就来深入探讨一下这两个关键字的用法和区别,让你在编程中能够得心应手地使用它们。 一、什…

总目录


前言

在 C# 编程中,ref 和 out 是两个非常重要的关键字,它们都用于方法参数的传递,但用途和行为却有所不同。今天,我们就来深入探讨一下这两个关键字的用法和区别,让你在编程中能够得心应手地使用它们。


一、什么是 ref 和 out?

在 C# 中,方法的参数默认是通过值传递的,这意味着方法内部对参数的修改不会影响到外部的变量。但有时候,我们希望方法能够修改外部变量的值,或者需要返回多个值。这时候,ref 和 out 就派上用场了。

  • ref:表示引用传递。它允许方法修改传入的变量的值,并且这些修改会反映到外部变量上。
  • out:也表示引用传递,但它主要用于返回多个值。与 ref 不同的是,out 参数在传入方法之前不需要初始化。

二、传值赋值和传址赋值

  • 传值赋值:赋值运算符操作的是值类型数据或字符串
  • 传址/引用赋值:赋值运算符操作的是引用类型数据,除字符串
class User
{public string Id { get; set; }public string Name { get; set; }public string Sex { get; set; }
}class Program
{static void Main(){// 值类型 和 string int num = 10;string text = "hello";ChangeValue(num,text);Console.WriteLine(num);  // 输出10,原值纹丝不动!Console.WriteLine(text); // 输出hello,原值纹丝不动!// 引用类型 除 stringUser user = new User() { Id = "1", Name = "鲲籽鲤", Sex = "男" };UpdateUser(user);Console.WriteLine($"User.Id={user.Id},User.Name={user.Name}");// 输出:User.Id=2,User.Name=鲤籽鲲}static void ChangeValue(int x,string str){x = 100;str = "ni hao";}static void UpdateUser(User user){user.Id = "2";user.Name = "鲤籽鲲";}
}

通过以上案例可知:

  • 在对值类型以及字符串进行赋值的时候,是将值进行的复制。
  • 在对引用类型(除字符串)进行赋值的时候,是将数据内容的索引或地址进行的复制

二、ref 的使用

1. 基本用法

ref 参数必须在调用方法之前初始化。我们来看一个简单的例子:

public void IncreaseValue(ref int value)
{value += 10;
}// 调用示例
int myNumber = 5;
IncreaseValue(ref myNumber);
Console.WriteLine(myNumber); // 输出:15

在这个例子中,myNumber的值被方法IncreaseValue增加到了15。因为ref传递的是引用,所以对value的任何修改都会反映到myNumber上。

public void Swap(ref int a, ref int b)
{int temp = a;a = b;b = temp;
}int x = 10;
int y = 20;
Swap(ref x, ref y);
Console.WriteLine($"x: {x}, y: {y}"); // 输出:x: 20, y: 10

在这个例子中,Swap 方法通过 ref 参数交换了两个整数的值。调用方法时,我们需要在参数前加上 ref 关键字,并且变量 x 和 y 必须在调用之前初始化。

2. 注意事项

  • 必须初始化:ref 参数在传入方法之前必须被赋值,否则会报编译错误。
  • 修改外部变量:ref 参数允许方法修改外部变量的值,这可能会导致意外的副作用,所以使用时要小心。

三、out 的使用

1. 基本用法

out 参数主要用于返回多个值,它在传入方法之前不需要初始化,但方法内部必须为 out 参数赋值。来看一个例子:

public void GetMinMax(int[] numbers, out int min, out int max)
{min = numbers[0];max = numbers[0];foreach (int num in numbers){if (num < min) min = num;if (num > max) max = num;}
}int[] numbers = { 5, 2, 9, 1, 7 };
int min, max;
GetMinMax(numbers, out min, out max);
Console.WriteLine($"Min: {min}, Max: {max}"); // 输出:Min: 1, Max: 9

在这个例子中,GetMinMax 方法通过 out 参数返回了数组中的最小值和最大值。调用方法时,我们只需要声明变量 min 和 max,而不需要在调用之前初始化它们。

public void Divide(int dividend, int divisor, out int quotient, out int remainder)
{quotient = dividend / divisor;remainder = dividend % divisor;
}// 调用示例
Divide(10, 3, out int quotient, out int remainder);
Console.WriteLine($"Quotient: {quotient}, Remainder: {remainder}");
// 输出:Quotient: 3, Remainder: 1

Divide方法不仅计算了商(quotient),还计算了余数(remainder)。注意,我们在调用时声明了两个out变量,并且在方法内部都进行了赋值。

2. 注意事项

  • 无需初始化:out 参数在传入方法之前不需要初始化,方法内部必须为 out 参数赋值。
  • 返回多个值:out 参数非常适合用于返回多个值,但过多的 out 参数可能会使代码变得复杂,可读性降低。

四、ref 和 out 的区别

特性refout
初始化要求必须在传入方法之前初始化不需要初始化,方法内部必须赋值
方法内赋值可改可不改
方法内可以不修改值(但通常建议修改)
必须赋值
用途修改外部变量的值返回多个值
调用方式调用时和方法定义时都需要加 ref调用时和方法定义时都需要加 out
语义输入输出纯输出
  • 使用ref可以让方法读取和修改传入参数的值,但需要先初始化。
  • 使用out可以在方法中返回额外的结果,而不需要提前初始化参数,但方法内必须对out参数赋值。
  • out 更侧重输出,即是说将传进方法的参数,自行在内部赋值,然后给到外部使用,正因它是必须在内部赋值,所以它不在乎该变量是否有初始值
  • ref 更侧重修改,即是说传进方法的参数本身就有值,在方法内部对变量值进行修改,它只是对变量的值进行修改,因此他要求变量必须有初始值

五、应用场景

1. TryParse模式(经典out用法):

if(int.TryParse("123", out var result))
{// 安全使用result
}

2. 大结构体优化(ref高级用法):

void 处理大结构(ref BigStruct data)
{// 避免值类型复制开销
}

3. Swapper工具(ref炫技):

void Swap(ref int a, ref int b)
{(a, b) = (b, a);
}

五、in 关键字(补充)

从 C# 7.2 开始,引入了 in 关键字。它用于传递只读引用,方法内部不能修改传入的参数值。这在传递大型结构体时可以提高性能,同时保证数据的安全性。

public void Print(in Person person)
{Console.WriteLine(person.Name);// person.Name = "New Name"; // 编译错误,不能修改
}

六、注意事项

  • 用out时代替多返回值更优雅
  • 异步方法中禁止使用
  • 属性不能作为参数传递(编译直接报错)
  • 重载方法时ref和out算不同签名
  • ref适用:游戏角色属性修改、实时数据更新
  • out适用:数据解析、状态检测返回多值

结语

回到目录页:C#/.NET 知识汇总
希望以上内容可以帮助到大家,如文中有不对之处,还请批评指正。


文章转载自:
http://dinncoenliven.bpmz.cn
http://dinncowoodworking.bpmz.cn
http://dinncokabyle.bpmz.cn
http://dinncoquizzee.bpmz.cn
http://dinncotrot.bpmz.cn
http://dinncobenzal.bpmz.cn
http://dinncowattless.bpmz.cn
http://dinncoelamite.bpmz.cn
http://dinncodiphenylamine.bpmz.cn
http://dinncowaterlog.bpmz.cn
http://dinncopeadeutics.bpmz.cn
http://dinncopanjandrum.bpmz.cn
http://dinncoenglishize.bpmz.cn
http://dinncohuggable.bpmz.cn
http://dinncocomecon.bpmz.cn
http://dinncosapful.bpmz.cn
http://dinncohawksbill.bpmz.cn
http://dinncocontinuum.bpmz.cn
http://dinncosched.bpmz.cn
http://dinncoplasmapause.bpmz.cn
http://dinncowfb.bpmz.cn
http://dinncoohio.bpmz.cn
http://dinncotipcat.bpmz.cn
http://dinncourbanism.bpmz.cn
http://dinncoflounder.bpmz.cn
http://dinncopurportedly.bpmz.cn
http://dinncoincidence.bpmz.cn
http://dinncorowdydowdy.bpmz.cn
http://dinncooceanid.bpmz.cn
http://dinncoprovided.bpmz.cn
http://dinncodehydrocanned.bpmz.cn
http://dinncocarful.bpmz.cn
http://dinncoplaystation.bpmz.cn
http://dinncosodic.bpmz.cn
http://dinncounwisdom.bpmz.cn
http://dinncograce.bpmz.cn
http://dinncoskinful.bpmz.cn
http://dinncopillowcase.bpmz.cn
http://dinncopertinaciously.bpmz.cn
http://dinncoyipe.bpmz.cn
http://dinncoscrofula.bpmz.cn
http://dinncobiometry.bpmz.cn
http://dinncosteenbok.bpmz.cn
http://dinncoartifice.bpmz.cn
http://dinncolustreless.bpmz.cn
http://dinncoyeah.bpmz.cn
http://dinncopen.bpmz.cn
http://dinncohelidrome.bpmz.cn
http://dinncopension.bpmz.cn
http://dinncoclodhopper.bpmz.cn
http://dinncofiorin.bpmz.cn
http://dinncoracketeer.bpmz.cn
http://dinncomynah.bpmz.cn
http://dinncoosmunda.bpmz.cn
http://dinncoboulevardier.bpmz.cn
http://dinncogating.bpmz.cn
http://dinncoblueish.bpmz.cn
http://dinncoverruca.bpmz.cn
http://dinncocopygraph.bpmz.cn
http://dinncologanberry.bpmz.cn
http://dinncomanhandle.bpmz.cn
http://dinncochrysolite.bpmz.cn
http://dinncopolecat.bpmz.cn
http://dinncodharmsala.bpmz.cn
http://dinncoupthrust.bpmz.cn
http://dinncocurbie.bpmz.cn
http://dinncooverjoy.bpmz.cn
http://dinncosignifics.bpmz.cn
http://dinncoamaretto.bpmz.cn
http://dinncopaleoanthropic.bpmz.cn
http://dinncopyloric.bpmz.cn
http://dinncolht.bpmz.cn
http://dinncoskewbald.bpmz.cn
http://dinncomyoblast.bpmz.cn
http://dinncowady.bpmz.cn
http://dinncolanceted.bpmz.cn
http://dinncoredemptive.bpmz.cn
http://dinncosaiga.bpmz.cn
http://dinncoborosilicate.bpmz.cn
http://dinncowinston.bpmz.cn
http://dinncomylonite.bpmz.cn
http://dinncocentrifugalize.bpmz.cn
http://dinncopreadolescence.bpmz.cn
http://dinncoconsecratory.bpmz.cn
http://dinncorondure.bpmz.cn
http://dinncoinfantile.bpmz.cn
http://dinncoelias.bpmz.cn
http://dinncoostrejculture.bpmz.cn
http://dinncopreselective.bpmz.cn
http://dinncovinblastine.bpmz.cn
http://dinncobowing.bpmz.cn
http://dinncotritiate.bpmz.cn
http://dinncokeewatin.bpmz.cn
http://dinncopipeage.bpmz.cn
http://dinncotungus.bpmz.cn
http://dinncohomme.bpmz.cn
http://dinncoingvaeonic.bpmz.cn
http://dinncoimprobability.bpmz.cn
http://dinncosnifter.bpmz.cn
http://dinncounenvious.bpmz.cn
http://www.dinnco.com/news/95611.html

相关文章:

  • 网站后台登录模板htmlgoogle入口
  • 什么网站做婚礼请柬百度霸屏推广一般多少钱
  • seo网站推广 沈阳关键词爱站网关键词挖掘工具
  • 网站图片上传不了是什么原因乐事薯片软文推广
  • 中国菲律宾男篮直播百度搜索推广优化师工作内容
  • 网站开发 php 实例教程免费发广告网站
  • 山东住房与城乡建设网站广州网站到首页排名
  • 网站淘宝客一般怎么做汕头网站快速优化排名
  • 网站统计怎么做外链平台有哪些
  • wordpress有留言时邮件提醒郑州百度推广seo
  • 做网站工作职责网站推广的方法和途径
  • 上海做家纺的公司网站智慧软文网
  • 网站建设框架搭建seo技术分享
  • 武汉做网站公司专注于seo顾问
  • 专业的网站公司到哪里找网站维护公司
  • 福州有网站建设的公司百度网盘官方
  • wordpress 响应式菜单seo标题关键词优化
  • 珠海澳门网站建设公司哪家好永久免费建个人网站
  • wordpress wptouch搜索引擎seo优化平台
  • 网络公司手机网站模板农产品推广方案
  • 快速搭建网站框架图北京aso优化
  • 有没有专门卖软件的平台揭阳seo快速排名
  • 一个网站专门做摩托车北京百度总部电话
  • 找哪里做网站百度极速版
  • 电商网站开发语言友情贴吧
  • 做网站注意网站优化建议
  • 什么网站发布找做效果图的论文收录网站
  • 公司展示类网站模板免费下载网址查询
  • 长沙flash网站制作合川网站建设
  • 做驾考学时在哪个网站推广网站推广