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

C# 数组(数组协变和数组继承的有用成员)

数组协变

在某些情况下,即使某个对象不是数组的基类型,也可以把它赋值给数组元素。这种属性叫
数组协变(arraycovariance)。在下面的情况下可以使用数组协变。

  • 数组是引用类型数组。
  • 在赋值的对象类型和数组基类型之间有隐式转换或显式转换。

由于在派生类和基类之间总是有隐式转换,因此总是可以将一个派生类的对象赋值给为基类
声明的数组
例如,如下代码声明了两个类,A和B,其中B类继承自A类。最后一行展示了把类型B的
对象赋值给类型A的数组元素而产生的协变。图13-15演示了代码的内存布局。

数组出现协变

说明值类型数组没有协变。

数组继承的有用成员

之前提到过,C#数组派生自System.Array类。它们可以从基类继承很多有用的属性和方法,
表13-1列出了其中最有用的一些。

数组继承的一些有用成员

例如,下面的代码使用了其中的一些属性和方法:

public static void PrintArray(int[] a)
{foreach(var x in a)Console.Write($"{x}");Console.WriteLine("");
}static void Main()
{int[] arr=new int[] {15,20,5,25,10};PrintArray(arr);Array.Sort(arr);PrintArray(arr);Array.Reverse(arr);PrintArray(arr);Console.WriteLine();Console.WriteLine($"Rank={arr.Rank},Length={arr.Length}");Console.WriteLine($"GetLength(0)    ={arr.GetLength(0)}");Console.WriteLine($"GetType()    ={arr.GetType()}");
}

Clone方法

Clone方法为数组进行浅复制,也就是说,它只创建了数组本身的克隆。如果是引用类型数
组,它不会复制元素引用的对象。对于值类型数组和引用类型数组而言,这有不同的结果。

  • 克隆值类型数组会产生两个独立数组。
  • 克隆引用类型数组会产生指向相同对象的两个数组。
    Clone方法返回object类型的引用,它必须被强制转换成数组类型

image
例如,如下代码给出了一个克隆值类型数组的示例,它产生了两个独立的数组。图13-16演
示了代码中的一些步骤。

static void Main()
{int[] intArr1={1,2,3};int[] intArr2=(int[])intArr1.Clone();intArr2[0]=100;intArr2[1]=200;intArr2[2]=300;
}

克隆引用类型数组会产生指向相同对象的两个数组,如下代码给出了一个示例。图13-17演
示了代码中的一些步骤。

class A
{public int Value=5;
}class Program
{static void Main(){A[] AArray1=new A[3]{new A(),new A(),new A()};A[] AArray1=(A[]) AArray1.Clone();AArray2[0].Value=100;AArray2[1].Value=200;AArray2[2].Value=300;}
}

克隆引用类型数组产生了引用相同对象的两个数组

相关文章:

  • 北京华宇信息技术有限公司系统服务工程师招聘面试题(笔试)
  • 大模型和ollama一起打包到一个docker镜像中
  • windows 访问ubuntu samba配置
  • C#设计模式-Builder-生成器-对象创建型模式
  • 【软考高级系统架构论文】# 论软件设计方法及其应用
  • 2025年SVN学习价值分析
  • PostgreSQL全栈部署指南:从零构建企业级高可用数据库集群
  • DataX 实现 Doris 和 MySQL 双向同步完全指南
  • 【破局痛点,赋能未来】领码 SPARK:铸就企业业务永续进化的智慧引擎—— 深度剖析持续演进之道,引领数字化新范式
  • 【unitrix】 4.0 类型级数值表示系统(types.rs)
  • 【数据结构与算法】数据结构初阶:详解顺序表和链表(一)
  • day39/60
  • LINUX 622 SAMBA
  • React基础
  • Spring JDBC配置与讲解
  • PixPin:一个强大且免费的截图贴图工具
  • 【51单片机】串口通信
  • Rust 引用与借用
  • Git使用总结
  • Android Studio报错:Supertypes of the following classes cannot be resolved
  • 移动网站性能/临安网站seo
  • 怎么弄网站/王通seo赚钱培训
  • 网站建设经验心得/百度认证考试
  • 网站建设公司推/郑州网站推广方案
  • 建设报名系统网站/百度一下电脑版首页网址
  • 格尔木市公司网站建设/建网站需要什么条件