c语言如何写欧姆定律并计算(的协变和逆变吗)
c语言如何写欧姆定律并计算(的协变和逆变吗)
2024-09-28 11:58:23  作者:滒颩采畩舊  网址:https://m.xinb2b.cn/tech/muf456007.html

从C# 4.0开始,泛型接口和泛型委托都支持协变和逆变,由于历史原因,数组也支持协变。里氏替换原则:任何基类可以出现的地方,子类一定可以出现。

协变(out)协变:即自然的变化,遵循里氏替换原则,表现在代码上则是任何基类都可以被其子类赋值,如Animal = Dog、Animal = Cat使用out关键字声明(注意和方法中修饰参数的out含义不同)被标记的参数类型只能作为方法的返回值(包括只读属性)在没有协变时:abstract class Animal {} class Dog : Animal {} class Cat : Animal {} interface IPoppable<T> { T Pop(); } class MyStack<T> : IPoppable<T> { private int _pos; private readonly T[] _data = new T[100]; public void Push(T obj) => _data[_pos ] = obj; public T Pop() => _data[--_pos]; } 以下代码是无法通过编译的var dogs = new MyStack<Dog>(); IPoppable<Animal> animals1 = dogs; // 此处会发生编译错误 Stack<Animal> animals2 = dogs; // 此处会发生编译错误 此时,我们如果需要为动物园饲养员新增一个输入参数为Stack<Animal>饲喂的方法,一个比较好的方法是新增一个约束泛型方法:class Zookeeper { public static void Feed<T>(IPoppable<T> animals) where T : Animal {} } // 或者 class Zookeeper { public static void Feed<T>(Stack<T> animals) where T : Animal {} } // Main Zookeeper.Feed(dogs);现在,C#增加了协变使IPoppable<T>接口支持协变// 仅仅增加了一个 out 声明 interface IPoppable<out T> { T Pop(); } 简化Feed方法class Zookeeper { public static void Feed(IPoppable<Animal> animals) {} } // Main Zookeeper.Feed(dogs); 协变的天然特性——仅可作为方法返回值,接口(或委托)外部无法进行元素添加,确保了泛型类型安全性,所以不用担心Dog的集合中出现Cat常用的支持协变的接口和委托有:IEnumerableIEnumeratorIQueryableIGrouping<out TKey, out TElement>Func等共17个Converter<in TInput, out TOutput>IEnumerable<Dog> dogs = Enumerable.Empty<Dog>(); IEnumerable<Animal> animals = dogs; var dogList = new List<Dog>(); IEnumerable<Animal> animals = dogList;另外,由于历史原因,数组也支持协变,例如var dogs = new Dog[10]; Animal[] animals = dogs; 但是无法保证类型安全性,以下代码可正常进行编译,但是运行时会报错animals[0] = new Cat(); // 运行时会报错逆变(in)逆变:即协变的逆向变化,实质上还是遵循里氏替换的原则,将子类赋值到基类上使用in关键字声明被标记的参数类型只能作为方法输入参数(包括只写属性)例如:abstract class Animal {} class Dog : Animal {} class Cat : Animal {} interface IPushable<in T> { void Push(T obj); } class MyStack<T> : IPushable<T> { private int _pos; private readonly T[] _data = new T[100]; public void Push(T obj) => _data[_pos ] = obj; public T Pop() => _data[--_pos]; } // Main var animals = new MyStack<Animal>(); animals.Push(new Cat()); IPushable<Dog> dogs = animals; dogs.Push(new Dog()); 逆变的天然特性——仅可作为方法输入参数,接口(或委托)无法进行元素获取,即只能将子类赋值到父类上,进而保证了类型安全性。另外,常用支持逆变的接口和委托有:IComparerIComparableIEqualityComparerAction等共16个PredicateComparisonConverter<in TInput, out TOutput>

Action<Animal> animalAction = new Action<Animal>(a => { });Action<Dog> DogAction = animalAction;


作者:xiaoxiaotank

出处:https://www.cnblogs.com/xiaoxiaotank/

  • 长颈鹿不属于鹿类吗
  • 2024-09-29长颈鹿不属于鹿类吗长颈鹿不属于鹿类,长颈鹿属于偶蹄目长颈鹿科鹿科动物的鹿角每年脱换一次,随着年龄增长,鹿角分叉的数量也会增加长颈鹿的角既不脱换,也不分叉非洲草原因为食草动物种类繁多,为了避免竞争,长颈鹿的祖先就去吃高处。
  • 考会计证需要什么条件(会计证报考条件)
  • 2024-09-29会计证报考条件必须是中华人民共和国公民,不受性别、年龄、民族、种族、学历、身体健康状况、居住地等限制(不限制户口,可在异地报考毕业),均可按省级自学考试机构规定的时间和地点报名参加考试对有特殊要求的专业,考生须按有。
  • 冬枣储存方法(冬枣怎么保存)
  • 2024-09-29冬枣怎么保存鲜枣将表面有碰伤,或者长黑斑生虫的坏枣挑出来,避免在储存期间,含有霉菌的坏枣感染到其他的鲜枣家庭保存鲜枣的方法一般使用冰箱,在买回来的鲜枣中,将新鲜完好且果皮不是全红的挑出来,用塑料袋密封,袋内留少量。
  • 两次饰演吴用(曾因饰吴用被大家熟知)
  • 2024-09-29曾因饰吴用被大家熟知《心跳源计划》是由宋茜、罗云熙领衔主演,主要讲述的是研究员裘佳宁与周小山先后入职源计划实验室周小山最初是一名掮客,目的是拿到源计划配方,他最后终于做出正确选择,两个人一起完成研究,为国争光掮客周小山谜。
  • 春晚主持人龙洋个人简介 春晚主持人龙洋
  • 2024-09-29春晚主持人龙洋个人简介 春晚主持人龙洋从来没有什么一夜成名一夜成名的背后是无数次的披荆斩棘2023年春晚舞台的C位是一名来自最底层的姑娘龙洋这是龙洋第二次主持春晚不一样的是时隔两年,再次主持春晚的龙洋却搭档任鲁豫稳居C位从南京这样的小电视。
  • 20个刷新认知的趣味冷知识(6个涨姿势的趣味冷知识)
  • 2024-09-296个涨姿势的趣味冷知识1、古代的人认为,家里的每一个东西都会有专门的神灵进行守护!比如厨房是灶王爷,守护厕所的叫做紫姑!2、古罗马的角斗场十分残酷,只要两个人进入之后,那么就一定要有一方死亡,但是这么血腥的规则却有一个不能。
  • 电饭锅使用方法(电饭锅正确使用方法介绍)
  • 2024-09-29电饭锅正确使用方法介绍将要煮的大米洗好,倒进锅中,然后把锅底擦干,再左右旋动几下,使之与底盘充分接触,然后盖好锅盖,进行加热如果用电饭锅煮粥、做汤,粥滚开,应将锅盖打开或半盖,当煮好后,按键也不会自动上跳这不是磁钢限温器的。
  • 艾蒿怎么吃(吃艾蒿的方法)
  • 2024-09-29吃艾蒿的方法选取新鲜的艾草嫩叶,洗净后,水烧开灼10-20秒左右去涩味,捞起备用灼水后的艾叶放到搅拌机,加入适量水打碎,打成糊状,加入两勺白糖糯米粉、粘米粉放入大盆中,并将打碎的艾叶浆倒出放到大盆和到一起,成型揉。
  • 今年北京植物园有郁金香吗(北京植物园郁金香盛开)
  • 2024-09-29北京植物园郁金香盛开4月13日,北京植物园科普馆西侧约4000平方米的展区内,100余个品种20余万株郁金香等球根花卉共同绽放,绘就出一幅巨大的多彩画卷展区内,五彩缤纷、绚丽多姿的郁金香铺展开来,或红或粉的桃花掩映其间,。
  • 名词单复数变化小学英语(小学英语中名词变复数的规则及顺口溜)
  • 2024-09-29小学英语中名词变复数的规则及顺口溜英语名词的复数形式,除了直接在背后加-s,还有很多特殊的情况首先要搞懂规则,理清逻辑,彻底搞明白英语的名词复数是怎么加的对于特殊的情况,孩子们如果单靠死记硬背,时间和精力花得多不说,时间久了还容易遗忘。