首页 > 编程语言 >C#基础:引用传递的关键字ref和out

C#基础:引用传递的关键字ref和out

时间:2024-07-06 18:20:57浏览次数:17  
标签:Console C# number 传递 int static ref out

在平时的编码过程中,如果我们需要调用一个函数,对一个变量进行一系列的操作,那么我们可以使用值传递和引用传递两种方法。

下面我举一个简单的例子:

 public static void Main(string[] args)
 {
     int number = 5;
     Console.WriteLine("number value= " + number);
     number = Add(number);
     Console.WriteLine("After calling Add: " + number);
 }

public static int Add(int a)
{
    return a+1;
}

 

上述代码实现的效果是对一个int类型的变量number进行加一的操作,这个操作是通过值传递实现的,即将number变量传给Add函数,由该函数操作后返回一个int类型的值,再赋值给number,这种方法实际上是复制了一个number,然后对其进行操作,在我们要传递复杂的类或者大型的对象的时候,这个复制的开销就会很大。

因此C#也提供了引用传递的方法,比起值传递,引用传递只需要传递一个指针,对于内存的开销会比较小,以下是使用ref关键字进行引用传递的实现:

 1  public static void Main(string[] args)
 2  {
 3      int number = 5;
 4      Console.WriteLine("number value= " + number);
 5 
 6      //引用传递
 7      Increment(ref number);
 8      Console.WriteLine("After calling Increment: " + number);
 9  }
10   static void Increment(ref int value)
11   {
12       value += 1;
13   }

在这个代码中,传递number变量的时候,我们在其前面和形参列表前加上ref,即可表示引用传递,ref关键字有个需要注意的点就是,在传递之前,该对象或者变量需要已经被初始化。

而C#中还有一个out关键字,它不需要初始化,但是它也仍然需要在函数内部被赋值。

以下是out关键字的示例:

public static void Main(string[] args)
{
    int number;
    Console.WriteLine("Before calling GetNumber: uninitialized");

    // 使用 out 参数的方式
    GetNumber(out number);
    Console.WriteLine("After calling GetNumber: " + number);

    // 使用返回值的方式
    number = GetAnotherNumber();
    Console.WriteLine("After calling GetAnotherNumber: " + number);
}

static void GetNumber(out int value)
{
    value = 42; // 必须在方法内部为 out 参数赋值
}

public static int GetAnotherNumber()
{
    return 42;
}

 

 

 

 

 

 

 

翻译

搜索

复制

标签:Console,C#,number,传递,int,static,ref,out
From: https://www.cnblogs.com/qingyuan0213/p/18287564

相关文章

  • ArcPy|使用ArcPy实现区域统(ZonalStatisticsAsTable)计并将统计结果添加到原有要素的属
    ArcPy|使用ArcPy实现按区域统计并将统计结果添加到原有要素的属性表​ 使用ArcPy快速实现按区域统计,并将统计结果添加到原有属性表,因为ArcPy的接口中并没有直接添加这一选项,这里是选择输出了一个中间dbf文件,再将中间dbf文件与原有要素连接来实现。#-*-coding:utf-8-*-"""P......
  • Advanced Generative Models (Diffusion)
    ......
  • Towards Accurate and Robust Architectures via Neural Architecture Search
    基于网络架构搜索的准确性与鲁棒性结构研究论文链接:https://arxiv.org/abs/2405.05502项目链接:未开源Abstract为了保护深度神经网络免受对抗性攻击,对抗性训练因其有效性而受到越来越多的关注。然而,对抗训练的准确性和鲁棒性受到体系结构的限制,因为对抗训练通过调整隶属......
  • 词性标记(Part-of-Speech tags)
    在序列标注中,常见的词性标记(Part-of-Speechtags)用于标识单词的语法类别和语法功能。这些标记通常采用简短的缩写形式表示。以下是一些常见的词性标记及其含义:NNP-Propernoun,singular表示专有名词,单数形式。例如:NewYork,Alice,Google。CD-Cardinalnumber表......
  • 语义角色标注(Semantic Role Labeling, SRL)
    语义角色标注(SemanticRoleLabeling,SRL)是自然语言处理中一种重要的任务,旨在识别和标注句子中每个谓词(通常是动词)与其周围单词之间的语义角色关系。每个语义角色表示动作或事件中的不同参与者的角色或语义功能。下面是一些常见的语义角色标签及其含义:ARG0:表示动作的施事(Agent......
  • Facebook开企业户&Facebook BM是什么?
    FacebookBM是Facebook针对广告投放,为广告主提供的一项一站式管理服务,全称是BusinessManager(商务管理平台)。它是一个免费工具,可以帮助卖家在一个版块中进行广告投放、查看、追踪,以及进行主页管理、广告账户管理、经销商合作等业务管理。具体来说,FacebookBM的主要功能包括:......
  • easyrecovery激活密钥免费 easyrecovery中文破解版下载 easyrecovery数据恢复软件免费
    前言:EasyRecovery(易恢复中国)是由全球著名数据厂商Ontrack®出品的一款数据文件恢复软件。支持恢复不同存储介质数据:硬盘、光盘、U盘/移动硬盘、数码相机、Raid文件恢复等,能恢复包括文档、表格、图片、音视频等各种文件。开发背景:企业需寻找到一个长久而有效的数据维护、......
  • 如何完美解决 “error pulling image configuration: download failed after attempts
    如何完美解决"errorpullingimageconfiguration:downloadfailedafterattempts=6:dialtcp59.188.250.54"......
  • 树莓派5 — 官方Raspberry Pi OS — OpenCV图像处理 — 1
    引言一名视觉入门选手,在校生大一,了解OpenCV的皮毛。撰写此文,一是为了分享内容,帮助后来人;二更是为了能吸引大佬能给我提出我在学习上的建议和问题。说明环境:树莓派5  官方操作系统RaspberryPiOS  OpenCV  Python语言  CSI500万摄像头内容:树莓派5安装OpenCV,调......
  • 解决Pycharm配置R语言环境报错RWrapper terminated, exitcode: 127
    问题解决Pycharm配置R语言环境报错RWrapperterminated,exitcode:127errorwhileloadingsharedlibraries:libR.so:site:stackoverflow.com解决方案1.打开GetEnvVars.R文件打开C:\Users\UserName\AppData\Roaming\JetBrains\PyCharm版本号\plugins\r-plugin\R\目录......