首页 > 编程语言 >C#中的协变

C#中的协变

时间:2023-10-17 16:03:50浏览次数:26  
标签:派生 C# 协变 Animal 基类 类型

在C#中,协变(covariance)一词来源于数学中的协方差(co-variance)概念。在数学中,协方差用于衡量两个变量之间的关系。类比到编程语言中的协变,它描述了派生类型与基类类型之间的关系。


在C#中,协变允许将派生类型的对象赋值给基类类型的变量,这意味着派生类型是基类类型的一种"协同变体"。也就是说,派生类型“配合”基类类型,使得基类类型的代码可以接受派生类型的对象。


因此,协变的含义是:通过允许派生类型赋值给基类类型的操作,使得基类类型与派生类型之间形成了一种协同变化的关系,提供了更大的灵活性和多态性。因此,C#中的协变被称为协变。

class Animal { }
class Dog : Animal { }

class Program
{
    static void Main()
    {
        Animal[] animals = new Animal[3];
        animals[0] = new Animal();
        animals[1] = new Dog(); // 协变:将Dog实例放入Animal数组

        foreach (Animal animal in animals)
        {
            Console.WriteLine(animal.GetType().Name);
        }
    }
}

标签:派生,C#,协变,Animal,基类,类型
From: https://blog.51cto.com/u_15279888/7907023

相关文章

  • value too long for type character varying报错处理
    瀚高数据库目录环境症状问题原因解决方案环境系统平台:N/A版本:4.5症状使用insertinto插入数据时出现报错valuetoolongfortypecharactervarying问题原因458新增NLS_LENGTH_SEMANTICS参数,默认设置为byte。之前版本默认为char。NLS_LENGTH_SEMANTICS:该参数有byte和char两种取值......
  • ecshop | php接入支付宝申报海关接口的总结【避坑】
    第一次对接支付宝的报关接口,害!不明白这个流程是很难接上的,搞了一天半,终于给搞出来了。在这里留下一点文字吧。代码前工作:用支付宝的密钥生成工具生成一对2048的公私钥,这对公私钥用来完成支付宝支付的加签和验签。把公钥上传到开放平台密钥中对应使用的应用接口加签方式中,私钥......
  • Spark入门运行wordcount
    在spark集群上跑一个程序首先保证下面进程开启zookeeperhdfsspark首先是父类的依赖<properties><scala.version>2.11.8</scala.version><spark.version>2.2.2</spark.version><hadoop.version>2.7.6</hadoop.version></pro......
  • C# DateTime 时间比较(只包含年月日时分不包含秒)
    一、DateTime.Compare(全时间比较)//摘要://比较系统的两个实例。DateTime,并返回一个整数,该整数指示//第一个实例是否早于、相同于或晚于第二个实例//例如。////参数://t1://第一个要比较的对象。......
  • JSVC简介
    JSVC简介及原理-掘金(juejin.cn)jsvc可以理解为类unix系统下的启动并守护java进程的可执行程序,属于ApacheCommonsDaemon项目。包括一下方法:voidinit(String[]arguments):Hereopenconfigurationfiles,createatracefile,createServerSockets,Threadsvoidsta......
  • 【NSSCTF逆向】【2023题目】《润!》
    题目解法这道题蛮搞的,不算简单。刚开始拿到这道题运行一下有些信息,是一道迷宫题,可能flag是我们输入的路线吧?先拿exeinfo来看看告诉我有壳,但是不要用upx-d来脱壳,结合题目的标签,知道这题有一个魔改upx壳。硬脱不行。说实话我对upx的了解很皮毛,网上搜了搜upx壳的详细源......
  • CF1068B LCM
    \[\frac{\operatorname{lcm}(a,b)}{a}=\frac{\frac{a\timesb}{\gcd(a,b)}}{a}=\frac{b}{\gcd(a,b)}\]因为\(a\)最大可以到\(10^{18}\),而\(b\)最大只有\(10^{10}\),对于\(b\)的每个可能成为答案的因数\(p\),只需构造\(a=\frac{b}{p}\)即可得到,所以答案就是\(b\)的因数......
  • OpenHarmony页面级UI状态存储:LocalStorage
     LocalStorage是页面级的UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility内,页面间共享状态。本文仅介绍LocalStorage使用场景和相关的装饰器:@LocalStorageProp和@LocalStorageLink。说明:LocalStorage从API v......
  • c++数组的二进制文件读写
    #include<fstream>//forifstream、ofstreamtemplate<typenameOB>inlinevoidsaveObject(constchar*filename,OB&object,intlength)//传入要保存的对象引用{std::ofstreamosm(filename,std::ios::out|std::ios::binary);osm.write((constcha......
  • kubectl 格式化输出
    1、显示Pod的更多信息,例如Node等:[root@k8s-master~]#kubectlgetpodnginx-585449566-qkwhc-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATESnginx-585449566-qkwhc1/1Runnin......