当前位置: 首页 > 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;}
}

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

http://www.lryc.cn/news/573634.html

相关文章:

  • webpack+vite前端构建工具 - 8 代码分割
  • 【数据结构试题】
  • C#Halcon从零开发_Day13_几种阈值分割方法
  • 《高等数学》(同济大学·第7版)第五章 定积分 第四节反常积分
  • 目标检测neck算法之MPCA和FSA的源码实现
  • python实战项目77:足球运动员数据分析
  • React 18.2.0 源码打包
  • C++智能指针的知识!
  • 无人机表演越来越火,C端市场大爆发
  • Java基础八股文 - 面试者心理历程与标准答案
  • 微处理器原理与应用篇---常见基础知识(7)
  • 反无人机系统:技术利刃如何守护低空安全?
  • 啥是 SaaS
  • C# .NET多线程异步记录日声,队列LOG
  • docker镜像封装与发布微服务学习
  • NotePad++ 怎么没有找到插件管理?
  • Python打卡DAY34
  • 【科研绘图系列】R语言绘制论文组合图形(multiple plots)
  • Redis快的原因
  • 【单调栈】-----【小A的柱状图】
  • 大零售生态下开源链动2+1模式、AI智能名片与S2B2C商城小程序的协同创新研究
  • 如何用AI开发完整的小程序<7>—让AI微调UI排版
  • Spring AI 项目实战(十):Spring Boot + AI + DeepSeek 构建智能合同分析技术实践(附完整源码)
  • opencv 之双目立体标定算法核心实现
  • C#控制Button单击事件指定时间间隔触发
  • 计算鱼眼相机的内参矩阵和畸变系数方法
  • 风险矩阵与灰色综合评价
  • AMAT P5000 CVDFDT CVDMAINT Precision 5000 Mark 操作 电气原理 PCB图 电路图等
  • git 如何忽略某个文件夹文件
  • NW896NW859美光固态闪存NW893NX764