前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C#中ref和out用法简介

C#中ref和out用法简介

作者头像
zls365
发布于 2021-12-06 08:08:51
发布于 2021-12-06 08:08:51
1.3K00
代码可运行
举报
文章被收录于专栏:CSharp编程大全CSharp编程大全
运行总次数:0
代码可运行

ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点。   使用ref前必须对变量赋值,out不用。   out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改。   区别可以参看下面的代码应该就明白了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
class TestApp
{
 static void outTest(out int x, out int y)
 {//离开这个函数前,必须对x和y赋值,否则会报错。
  //y = x;
  //上面这行会报错,因为使用了out后,x和y都清空了,需要重新赋值,即使调用函数前赋过值也不行
  x = 1;
  y = 2;
 }
 static void refTest(ref int x, ref int y)
 {
  x = 1;
  y = x;
 }
 public static void Main()
 {
  //out test
  int a,b;
  //out使用前,变量可以不赋值
  outTest(out a, out b);
  Console.WriteLine("a={0};b={1}",a,b);
  int c=11,d=22;
  outTest(out c, out d);
  Console.WriteLine("c={0};d={1}",c,d);
  //ref test
  int m,n;
  //refTest(ref m, ref n);
  //上面这行会出错,ref使用前,变量必须赋值
  int o=11,p=22;
  refTest(ref o, ref p);
  Console.WriteLine("o={0};p={1}",o,p);
 }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CSharp编程大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ref和out的区别在c#中 总结
 ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。简单点说就是,使用了ref和out的效果就几乎和C中使用了指针变量一样。它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作。 还是以例子来说明吧; 1. ref: int i =0; 有函数fun(ref i)和fun(i) 它们的函数体都是{ i = 3;},那么在执行以下两段代码后: (1)int i = 0; fun(i); System.Console.WriteLi
小小许
2018/09/20
4460
C#基础知识 之 ✨ ref 和 out 之间的江湖趣闻
按照国际惯例,要了解一个东西的时候,首先明白它是什么,然后明白它能做什么,最后要知道为什么。 所以在介绍ref和out之前要先简单了解一下什么是引用参数与输出参数,因为使用ref和out要有所了解
呆呆敲代码的小Y
2021/08/12
2.6K0
C#委托
在C#中的委托关键字是 Delegate,委托类似于C/C++中函数的指针。是存有对某个方法引用的引用类型变量,可在运行时被改变。一般用于实现事件和回调方法。
喵叔
2020/09/08
5820
C#委托
C#中的out和ref关键字
out和ref都使用引用传递将参数传入方法,out和ref的主要区别,ref使用时必须对传入的参数进行初始化,out对传入的参数在方法中必须赋值,否则会报错“控制离开方法之前必须对out参数赋值”
MaybeHC
2024/04/23
1400
C#中的out和ref关键字
# C#学习-属性-方法-变量作用域--数据类型整合--面向对象
快捷设置字段的访问方式,只读or只写or可读可写,就可以使用到属性,或称属性访问器。
呆呆敲代码的小Y
2021/08/12
4410
c#基础系列3---深入理解ref 和out
在上篇文章深入理解值类型和引用类型的时候,有的小伙伴就推荐说一说ref和out 关键字,昨天晚上彻夜难眠在想是否要谈一下呢,因为可谈的不是太多,也可能是我理解的不够深刻。
架构师修行之路
2019/07/23
1.6K0
[C#] ref知多少
要理解C# 7的ref特性,需要认真回顾C# 6以前版本中ref参数的工作原理,首先是变量和值之间的区别。
科控物联
2022/03/29
1.3K0
[C#] ref知多少
C# ref,params,out 修饰符
out 和ref 相反,调用方法参数被out修饰的方法时,被out修饰的参数变量,在声明后可以不用赋值,但是在方法体内必须赋值,使用方法如下:
多凡
2020/06/16
3890
C# ref与out
ref参数是引用,out参数为输出参数。 我写一个控制台的程序来说明一下两者的特点和区别: 1 class Program 2 { 3   public static void RefMethod( ref int i) //参数使用了ref关键字 4   { 5     i++; 6   } 7   public static void OutMethod(out int i) //参数使用了out关键字 8   { 9     i = 0; //out参数规定,参数在方法体内必须被初始
拾点阳光
2018/05/10
9030
C# .NET面试系列一:基础语法
请注意,在处理字符时,需要确保其值在 byte 类型的范围内。如果要将字符串赋值给 byte 类型,可能需要使用 Convert 类或其他适当的转换方法。
GoodTime
2024/03/07
3140
C# .NET面试系列一:基础语法
Python3 与 C# 扩展之~基础衍生
在线编程: https://mybinder.org/v2/gh/lotapp/BaseCode/master
逸鹏
2018/07/08
1.9K0
Python3 与 C# 扩展之~基础衍生
Python3 与 C# 基础语法对比(Function专栏)
汇总系列:https://www.cnblogs.com/dunitian/p/4822808.html#ai
逸鹏
2018/06/13
5830
Python3 与 C# 基础语法对比(Function专栏)
C# 数据类型转换 显式转型、隐式转型、强制转型
显式转型:有可能引发异常、精确度丢失及其他问题的转换方式。需要使用手段进行转换操作。
痴者工良
2021/04/26
1.2K0
C#基础知识系列一(goto、i++、三元运算符、ref和out、String和string、重载运算符)
  这两天在网上看到的总结很多,尤其是博客园中的,很多很多,也给了我很多的启发,当然自己也总结过,而且有很多人也给与我一些意见和看法。不管怎样,自己还是先把所谓的基础知识加强巩固下吧。
aehyok
2018/09/11
7700
C#基础知识系列一(goto、i++、三元运算符、ref和out、String和string、重载运算符)
[读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法
前言 这一章算是看这本书最大的收获了, Lambda表达式让人用着屡试不爽, C#3.0可谓颠覆了我们的代码编写风格. 因为Lambda所需篇幅挺大, 所以先总结C#3.0智能编译器给我们带来的诸多好处, 下一遍会单独介绍Lambda表达式. 这篇主要包括的内容有: 自动属性,隐式类型,对象集合初始化,匿名类型,扩展方法. 下面一起来看下C#3.0 所带来的变化吧. 1,自动实现的属性 在C#3.0之前, 定义属性时一般会像下面这样去编写代码: 1 class Person 2 { 3 /
一枝花算不算浪漫
2018/05/18
8420
Python3 与 C# 基础语法对比(Function专栏-新排版)
在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master
逸鹏
2018/07/23
1.3K0
Python3 与 C# 基础语法对比(Function专栏-新排版)
C# 中的 Out 和 Ref 及Params 参数
out 和ref 参数 经常用来通过方法传递参数来获取值,当您的方法不只有一个返回值的时候,这两个参数就发挥作用了。ref是传递参数的地址,out是返回值,两者有一定的相同之处,不过也有不同点。  在这篇文章里,我将解释如何在c#应用中使用这两个参数。   1、out 参数   out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。   public class mathClass { public static int TestOu
跟着阿笨一起玩NET
2018/09/18
1.2K0
Python3 与 C# 基础语法对比(List、Tuple、Dict、Set专栏-新排版)
在线预览:http://github.lesschina.com/python/base/pop/3.listtupledict_set.html
逸鹏
2018/07/23
3K0
Python3 与 C# 基础语法对比(List、Tuple、Dict、Set专栏-新排版)
C# 4.0 - 7.0 新语法特性小结
本篇总结一些 C# 4.0 - 7.0的语法特性。如今都是距离5.xUnity盛行的时代都过去两年多了,该看一看新语法不然要落伍啦。
keyle
2024/11/01
1080
C# 4.0 - 7.0 新语法特性小结
C# 中 Struct 和 Class 的区别总结
结构体(struct)是类(class)的轻量级版本。结构体是值类型,可用于创建行为类似于内置类型的对象。
zls365
2021/04/02
1.4K0
相关推荐
ref和out的区别在c#中 总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验