C#编程中使用ref和out关键字来传递数组对象的用法
作者:goldensun 发布时间:2021-09-25 23:19:45
标签:C#,ref,out
在 C# 中,数组实际上是对象,而不只是像 C 和 C++ 中那样的可寻址连续内存区域。 Array 是所有数组类型的抽象基类型。 可以使用 Array 具有的属性以及其他类成员。 这种用法的一个示例是使用 Length 属性来获取数组的长度。 下面的代码将 numbers 数组的长度(为 5)赋给名为 lengthOfNumbers 的变量:
int[] numbers = { 1, 2, 3, 4, 5 };
int lengthOfNumbers = numbers.Length;
Array 类提供了许多其他有用的方法和属性,用于排序、搜索和复制数组。
示例
此示例使用 Rank 属性来显示数组的维数。
class TestArraysClass
{
static void Main()
{
// Declare and initialize an array:
int[,] theArray = new int[5, 10];
System.Console.WriteLine("The array has {0} dimensions.", theArray.Rank);
}
}
输出:
The array has 2 dimensions.
使用 ref 和 out 传递数组
与所有 out 参数一样,在使用数组类型的 out 参数前必须先为其赋值;即必须由被调用方为其赋值。例如:
static void TestMethod1(out int[] arr)
{
arr = new int[10]; // definite assignment of arr
}
与所有 ref 参数一样,数组类型的 ref 参数必须由调用方明确赋值。因此,不需要由被调用方明确赋值。可以将数组类型的 ref 参数更改为调用的结果。例如,可以为数组赋以 null 值,或将其初始化为另一个数组。例如:
static void TestMethod2(ref int[] arr)
{
arr = new int[10]; // arr initialized to a different array
}
下面两个示例演示了 out 与 ref 在将数组传递给方法时的用法差异。
在此示例中,在调用方(Main 方法)中声明数组 theArray,并在 FillArray 方法中初始化此数组。然后,数组元素将返回调用方并显示。
class TestOut
{
static void FillArray(out int[] arr)
{
// Initialize the array:
arr = new int[5] { 1, 2, 3, 4, 5 };
}
static void Main()
{
int[] theArray; // Initialization is not required
// Pass the array to the callee using out:
FillArray(out theArray);
// Display the array elements:
System.Console.WriteLine("Array elements are:");
for (int i = 0; i < theArray.Length; i++)
{
System.Console.Write(theArray[i] + " ");
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
输出:
Array elements are:
1 2 3 4 5
在此示例中,在调用方(Main 方法)中初始化数组 theArray,并通过使用 ref 参数将其传递给 FillArray 方法。在 FillArray 方法中更新某些数组元素。然后,数组元素将返回调用方并显示。
class TestRef
{
static void FillArray(ref int[] arr)
{
// Create the array on demand:
if (arr == null)
{
arr = new int[10];
}
// Fill the array:
arr[0] = 1111;
arr[4] = 5555;
}
static void Main()
{
// Initialize the array:
int[] theArray = { 1, 2, 3, 4, 5 };
// Pass the array using ref:
FillArray(ref theArray);
// Display the updated array:
System.Console.WriteLine("Array elements are:");
for (int i = 0; i < theArray.Length; i++)
{
System.Console.Write(theArray[i] + " ");
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
输出:
Array elements are:
1111 2 3 4 5555


猜你喜欢
- 什么是抽象类什么是抽象类呢?抽象类顾名思义就是很抽象,就是当我们没有足够的信息去描述这个类的时候我们就可以先不用描述,这样的类就是抽象类。用
- 使用JDBC时,我们都会很自然得使用下列语句:Class.forName("com.mysql.jdbc.Driver"
- 前言:在 Spring 中, IOC 是很重要的概念,其本质就是 map 结构,存储容器和业务 Be
- 年纪大了,以前做过的东西过阵子还是会忘,今天使用jenkins持续集成工具时用到了eclipse上传新maven工程至svn,上传完毕后改了
- Dart实体类格式class CategoryMo { String name; int count;CategoryMo({this.na
- 本文实例为大家分享了Android实现秒表功能的具体代码,供大家参考,具体内容如下今天为了给师弟们讲安卓,花了10分钟写了一个简易的秒表ap
- 本文基于Java实现了一个简单的单词本安卓a
- 判断JSONObject是否存在某个KeyJSONObject jsonObj = new JSONObject();jsonObj.put
- 爱java 爱dota,突发奇想想用java开发dota操作最华丽的英雄之一的卡尔的技能,因为本人系小白,代码不足的地方还请包涵,有同样爱好
- 本文实例讲述了Android开发Wifi的基础知识。分享给大家供大家参考。具体如下:Android提供了WifiManager这个类,通过这
- 线程池无限制的创建线程若采用"为每个任务分配一个线程"的方式会存在一些缺陷,尤其是当需要创建大量线程时:线程生命周期的开
- 本文实例为大家分享了Android实现连连看游戏的具体代码,供大家参考,具体内容如下本人用 android studio 实现的源码主活动
- 线上出现了如上的 crash,第一解决反应是在 show dialog 之前做个 isFinish 和 isDestroyed 判断,当我翻
- 本文实例讲述了Java实现的Base64加密算法。分享给大家供大家参考,具体如下:一 算法实现1、JDK2、Commonc Codec3、B
- 一、安装MongoDB4.0.3(××)1.1、官方安装文档https://docs.mongodb.com/manual/tutorial
- 简介现在市面上的apk只要涉及用户中心都会有头像,而且这个头像也是可自定义的,有的会采取读取相册选择其中一张作为需求照片,另一种就是调用系统
- 如下所示:public static String reThreeStr(String ss){boolean result= ss.mat
- 一、Splash界面的作用用来展现产品的Logo应用程序初始化的操作检查应用程序的版本检查当前应用程序是否合法注册二、界面的xml定义写一个
- RocketMQ 是什么Github 上关于 RocketMQ 的介绍:RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件
- 本文实例讲述了Android编程实现自动检测版本及自动升级的方法。分享给大家供大家参考,具体如下:步骤:1.检测当前版本的信息Android