C#学习笔记 -- 数组: 数组浅克隆、ref返回与ref局部变量

1、Clone()

Clone方法为数组进行浅复制

  • 它只创建了数组本身的克隆.

  • 如果是引用类型数组, 他不会赋值元素引用的对象

  • 对于值类型和引用类型数组来说, 具有不同的结果

    • 克隆值类型数组会产生两个独立数组

    • 克隆引用类型数组会产生指向相同对象的两个数组

  • 克隆方法返回object类型的引用, 它必须被强制转换成数组类型

int[] intArr1 = {1, 2, 3};
int[] intArr2 = (int[]) intArr1.Clone();
例子1 克隆值类型
static void Main(string[] args)
{
   int[] intArr1 = { 1, 2, 3 };
   int[] intArr2 = (int[])intArr1.Clone();
   for (int i = 0; i < intArr2.GetLength(0); i++)
  {
       intArr2[i] = i * 100;
  }
}

例子2 克隆引用类型
static void Main(string[] args)
{
   A[] Aarry1 = new A[3] { new A(), new A() , new A() };
   A[] Aarry2 = (A[]) Aarry1.Clone();
   for (int i = 0; i < Aarry2.GetLength(0); i++)
  {
       Aarry2[i].Value = (i+1) * 100;
  }
   Printer.PrintArrays13Clone(Aarry1);  //100 200 300
   Printer.PrintArrays13Clone(Aarry2);  //100 200 300
}

2、ref返回和ref局部变量

  • ref返回可以把一个引用作为返回值传到方法体外

  • ref局部变量可以在调用域中使用该引用

使用ref返回和ref局部变量, 可以将某个数组中的某个元素的引用获取并使用, 而不是该元素的值

public static ref int PointerToHighestPositive(int[] nums)
{
   int highestIndex = 0;
   int highestValue = nums[0];
   for (int i = 0; i < nums.Length; i++)
  {
       if (nums[i] > highestValue)
      {
           highestValue = nums[i];
           highestIndex = i;
      }
  }
   return ref nums[highestIndex];
}
static void Main(string[] args)
{
   int[] nums = new int[] { 5, 80 };
   Console.WriteLine("before"); //5 80
   foreach (var num in nums)
  {
       Console.Write($"{num} ");
  }
   Console.WriteLine("\nafter"); //5 0
   ref int heightElement = ref Program1314.PointerToHighestPositive(nums);
   heightElement = 0; //修改最高值
   foreach (var num in nums)
  {
       Console.Write($"{num} ");
  }
}
//5 80
//5 0

posted on   老菜农  阅读(189)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

统计信息

点击右上角即可分享
微信分享提示