c语言如何写欧姆定律并计算(的协变和逆变吗)
c语言如何写欧姆定律并计算(的协变和逆变吗)
2024-09-28 02:33:15  作者:滒颩采畩舊  网址:https://m.xinb2b.cn/life/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-28在水浒传是怎么死的在施耐庵所著《水浒传》中,西门庆是死于侠义英雄武松的刀下,命丧狮子楼在兰陵笑笑生所著的《金瓶梅》中,西门庆却是在正与潘金莲共赴云雨之时,“昏迷去,四肢不收”,后来方醒;次日清早“起来梳头,忽然一阵眩晕。
  • 广州中考普高录取第四梯队学校(升学宝典广州中考)
  • 2024-09-28升学宝典广州中考文/羊城晚报全媒体记者蒋隽图/黄埔区教育局提供6月1日-5日,广州中考即将填报志愿黄埔区有哪些宝藏高中?本区和外区生如何填报?黄埔区教育局详细解析报考攻略招生计划增加10.9%黄埔区的普高,教育格局怎。
  • 郭帆名言(郭帆饶晓志合作翻译官)
  • 2024-09-28郭帆饶晓志合作翻译官与会嘉宾合影|(1/12)1905电影网讯3月29日,华策影业在京举行片单发布会,公布了包括郭帆监制、饶晓志执导《翻译官》,路阳《刺杀小说家》后的“小说家宇宙”,毕赣未命名新作等电影在内的新片在发布会。
  • 氯化钠蒸发结晶的正确操作顺序(氯化钾蒸发结晶还是降温结晶)
  • 2024-09-28氯化钾蒸发结晶还是降温结晶氯化钾蒸发结晶还是降温结晶?氯化钾铵是重要的无机复合盐,在农业、食品、医药和废水处理行业应用广泛,随着其需求量日益增大,氯化钾铵大型化、连续化生产成为迫切需要氯化钾蒸发结晶还是降温结晶呢?康景辉小编和。
  • 绿纳汽车内饰清洁胶(绿纳汽车内饰清洁软胶)
  • 2024-09-28绿纳汽车内饰清洁软胶绿纳多功能清洁软胶,脏东西一按及粘,免清洗,清洁死角,除尘换新,气味芬芳,便携存储!可反复使用,温和成分!清洗不伤,无异味~车上办公室放一块,再也不怕灰尘啦!产品图片汽车内饰的清洁,一直都是一件比较令。
  • 粤港澳大湾区学习感言(公开课这个暑假)
  • 2024-09-28公开课这个暑假“双减”政策落地后,校外培训机构凉了,但家长的焦虑并没有减轻除了“官托”,还有什么方法能让孩子不虚度假期?带着“让孩子学点什么”的执念,研学旅行,正在成为家长的另一种选择如果就近出游,走读家门口的粤港。
  • 百变大咖秀刘维心情不错(百变大咖秀4月16日收官)
  • 2024-09-28百变大咖秀4月16日收官《百变大咖秀》本季即将迎来收官,上期节目中,锤娜丽莎携冯提莫和VAVA大秀唱功嗨翻全场、大白沈组合倾情献唱勾起无数观众回忆4月16日晚十时,本季节目收官之作将在湖南卫视正式和观众见面,随着嘉宾名单陆续。
  • 对迭代的观点或方法感悟:关于迭代的思考
  • 2024-09-28对迭代的观点或方法感悟:关于迭代的思考迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值涌现是一种从低层次到高层次的过渡,是在微观主体进化的基础上。
  • 护肤品怎么选择才是最好的(护肤品该如何挑选呢)
  • 2024-09-28护肤品该如何挑选呢特别声明:文内所有治疗方案及药品仅供学习、交流,请就医后遵医嘱治疗使用护肤已经成为很多人生活中不可或缺的一部分,护肤品的挑选也是一件十分重要的部分,有些患者本身皮肤较为敏感,因为使用了不合适自己的护肤。
  • 晓看天色暮看云适合发朋友圈吗(眼中见心中想看云参禅)
  • 2024-09-28眼中见心中想看云参禅这是6月26日傍晚时拍下的云朵,调了色调,有点像工艺品感觉有佛,有龙,有大虾那些神仙又好像浮在方舟之上色调不同,对云朵的联想就不同眼中所见的形象正在悄悄变化这是原图的截图,比例放大没有调色,没有加光,。