Covarience And ContraVariance】的更多相关文章

using System; using System.Collections.Generic; using System.IO; namespace CovarientAndContraVarient { class Program { static object GetObject() { return null; } static void SetObject(object obj) { } static string GetString() { return ""; } stat…
源码下载 一.里氏替换原则(Liskov Substitution Principle LSP) 我们要讲的不是协变性和逆变性(Covariance & Contravariance)吗?是的,没错.但先不要着急,在这之前,我们有必要再回味一下LSP.废话不多说,直接上代码: namespace LSP { public class Bird { public virtual void Show() { Console.WriteLine("It's me, bird.");…
http://blogs.msdn.com/b/ericlippert/archive/2007/10/16/covariance-and-contravariance-in-c-part-one.aspx I have been wanting for a long time to do a series of articles about covariance and contravariance (which I will shorten to “variance” for the res…
协变,逆变与不变 能在使用父类型的场景中改用子类型的被称为协变. 能在使用子类型的场景中改用父类型的被称为逆变. 不能做到以上两点的被称为不变. 以上的场景通常包括数组,继承和泛型. 协变逆变与泛型(C#,Java) 在C#中,泛型参数的类型缺省是不变的,但是我们可以在定义泛型接口或委托时通过给参数类型加上out或in来标注该参数类型是协变还是逆变. 协变意味着你能把 IEnumerable<string> 用在需要 IEnumerable<object> 的地方. 这里 IEnu…
Covariance and Contravariance (C#) https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/concepts/covariance-contravariance/ In C#, covariance and contravariance enable implicit reference conversion for array types, delegate types…
逆变(Contravariance)/协变(Covariance) 1. 基本概念 官方: 协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型.协变/逆变只支持委托.泛型接口.数组由于历史的原因也支持协变/逆变.在 C# 中,协变和逆变能够实现数组类型.委托类型和泛型类型参数的隐式引用转换. 协变保留分配兼容性,逆变则与之相反.协变允许方法具有的返回类型比接口的泛型类型参数定义的返回类型的派…
http://blogs.msdn.com/b/ericlippert/archive/2007/10/17/covariance-and-contravariance-in-c-part-two-array-covariance.aspx C# implements variance in two ways. Today, the broken way. Ever since C# 1.0, arrays where the element type is a reference type a…
摘要 ● 协变和逆变的定义是什么?给我们带来了什么便利?如何应用? ● 对于可变的泛型接口,为什么要区分成协变的和逆变的两种?只要一种不是更方便吗? ● 为什么还有不可变的泛型接口,为什么有的泛型接口要故意声明成不可变的? ● 复合的可变泛型接口遵循哪些规则? ● 协变和逆变的数学定义是什么?如何利用数学模型解释C#4里的协变和逆变的规则? 前言 协变和逆变是c#4.0引入的新概念,主要是针对于泛型而言的.有了它们,我们可以更准确的定义泛型委托和接口. 首先举个栗子,比如IEnumerable<…
数组和泛型容器有什么区别 要区分数组和泛型容器的功能,这里先要理解三个概念:协变性(covariance).逆变性(contravariance)和无关性(invariant). 若类A是类B的子类,则记作A ≦ B.设有变换f(),若: 当A ≦ B时,有f(A)≦ f(B),则称变换f()具有协变性: 当A ≦ B时,有f(B)≦ f(A),则称变换f()具有逆变性: 如果以上两者皆不成立,则称变换f()具有无关性. 在Java中,数组具有协变性,而泛型具有无关性,示例代码如下: Objec…
MSDN上的说法: 协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型----------(注意,这里说的可以使用更具体的类型是指可以给跟具体的类型传递相对不太具体的参数). 泛型类型参数支持协变和逆变,可在分配和使用泛型类型方面提供更大的灵活性. 在引用类型系统时,协变.逆变和不变性具有如下定义. 这些示例假定一个名为 Base 的基类和一个名为 Derived 的派生类.使你能够使用比原…
1. Unified Type System Scala has a unified type system, enclosed by the type Any at the top of the hierarchy and the type Nothing at the bottom of the hierarchy. All Scala types inherit from Any. # Using Any, Book extends AnyRef, and x is an Int that…
Caliburn.Micro学习笔记目录 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以做到对广播做到统一的管理 对象实现IHand<T>接口后通过EventAg…
Generics The term "generic" means "pertaining or appropriate to large groups of classes." While using someone else's generic type is fairly easy, when creating your own you will encounter a number of surprises. Comparison with C++ Unde…
C#是微软推出的一种基于.NET框架的.面向对象的高级编程语言.C#的发音为"C sharp",模仿音乐上的音名"C♯"(C调升),是C语言的升级的意思.其正确写法应和音名一样为"C♯"[来源请求],但大多数情况下"♯"符号被井号"#"所混用:两者差别是:"♯"的笔画是上下偏斜的,而"#"的笔画是左右偏斜.C♯由C语言和C++派生而来,继承了其强大的性能,同时又以.N…
看下面一段代码 Number num = new Integer(1); ArrayList<Number> list = new ArrayList<Integer>(); //type mismatch List<? extends Number> list = new ArrayList<Number>(); list.add(new Integer(1)); //error list.add(new Float(1.2f)); //error 有人会…
C# 4.0 (.NET 4.0, VS2010) 第四代C#借鉴了动态语言的特性,搞出了动态语言运行时,真的是全面向“高大上”靠齐啊. 1. DLR动态语言运行时 C#作为静态语言,它需要编译以后运行,在编译的过程中,编译器要检查语法的正确性和类型的安全性,这是一个静态查找(编译时查找)的过程.确实,在运行之前发现问题总比在运行时发型问题要好的多,早发现早治疗嘛!但是这样做有时候会带来一些麻烦,比如类型在编译时无法获得时. 看网上经典的一个例子:动态计算器. 假设有一个计算器,它所在的程序集是…
初识C# C#是微软公司发布的面向对象的.运行于.NET Framework之上的高级程序设计语言.与Java有着明显不同,借鉴Delphi的特点,与COM(组件对象模型)直接集成,是微软公司 .NET windows网络框架的主角. C#是一种语言,.net是一个平台.C#不但可以开发基于.net的应用程序,也可以开发基于WinForm的程序.. net 是 Microsoft 的 XML Web 服务平台,XML Web 服务能使应用程序在 Internet 上传输和共享数据. 特点: 强类…
原书链接: http://www.amazon.com/Adaptive-Code-via-principles-Developer-ebook/dp/B00OCLLYTY/ref=dp_kinw_strp_1 这本书的标题很失败:它不是讲C#而是讲敏捷的.不知道是因为Agile这个词用的太多了还是怎么样,弄了个Adaptive在标题里,副标题里倒是有Agile,可惜太不显眼了.如果让我来翻译的话我觉得标题可以是:代码的敏捷之道(基于C#语言进行描述).可能长了点,但毕竟能让人一眼就知道这本书到…
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2 技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群 DT大数据梦工厂① :462923555 DT大数据梦工厂②:437123764 DT大数据梦工厂③…
benifit: 1.make developers extremely productive is code reuse, which is the ability to derive a class that inherits all of the capabilities of a base class. The derived class can simply override virtual methods or add some new methods to customize th…
This is a quick guide covering nearly all of Nemerle's features. It should be especially useful to anyone who is already familiar with C# or a similar language: Table of Contents Variables Operators Logical Operators Bit Operators Type Casts/Conversi…
1. 概述 本章讲解如何使用 委托.lambda表达式 和 匿名方法 来创建和使用事件. 2. 主要内容 2.1 理解委托 委托是一种用方法签名形式定义的类型.可以让它指向其他方法,可以通过它调用其他方法. ① 委托支持多播(multicasting),可以用 + 和 += 操作符绑定多个方法到委托中(用 - 和 -= 取消绑定). public void Method1() {} public void Method2() {} public delegate void Del(); publ…
发布日期:2009.05.22 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. /// <summary> /// 本文开始,将以<.NET 4.0深入>为主线,开始一段体验.NET 4.0的激动旅程. /// </summary> 总体来说,这是一篇介绍性的文章,不会涉及过多技术细节和研究过程.但是,作为拉开序幕的第一页,本文以提纲挈领的方式展开对.NET 4.0的初次体验.从What’s new的角度,开始我对…
原文:http://www.cnblogs.com/palo/archive/2009/03/01/1400949.html 终于静下心来仔细听了一遍Anders Hejlsberg(Visual Studio组的TECHNICAL FELLOW,C#的设计者之一)在PDC08上讲的"The Future of C#"(http://channel9.msdn.com/pdc2008/TL16/). 回顾C#发展的历史,C#1.0完全是模仿Java,并保留了C/C++的一些特性如str…
什么叫做协变(covariance)和逆变(contravariance)? 在变成语言的类型框架中,协变和逆变是指宽类型和窄类型在某种情况下(如参数,泛型,返回值)替换或交换的特性,简单的说,协变是用一个窄类型替换宽类型,而逆变则是用宽类型覆盖窄类型. 协变:宽类型------>窄类型 逆变:窄类型------>宽类型 class Base{ public Number doStuff(){ return 0; } } class Sub extends Base{ @Override pu…
What's New in Visual C# .NET 2003[Visual Studio .NET 2003] What's New in Visual C# 2005 What's New in Visual C# 2008 What's New in Visual C# 2010 What's New for Visual C# in Visual Studio 2012 What's New for Visual C# 2015 === =======================…
http://stackoverflow.com/questions/8704332/co-variant-array-conversion-from-x-to-y-may-cause-run-time-exception What it means is this Control[] controls = new LinkLabel[10]; // compile time legal controls[0] = new TextBox(); // compile time legal, ru…
1.C#3.0以前的协变与逆变 如果你是第一次听说这个两个词,别担心,他们其实很常见.C#4.0中的协变与逆变[1](Covariance and contravariance)有了进一步的完善,主要是两种运行时的(隐式)泛型类型参数转换.简单来讲,所谓协变(Covariance)是指把类型从“小”升到“大”,比如从子类升级到父类:逆变则是指从“大”变到“小”,两者各有不同的条件和用途.下面的例子演示了C#3.0以前对协变与逆变支持[2] : 代码1        public class An…
作为一个从接触 Unity 3D 才开始学习 C# 的人,我一直只了解一些最基本.最简单的语言特性.最近看了<C# in Depth>这本书,发现这里面东西还真不少,即使除去和 Windows 编程相关的内容,只是兼容 Unity 的部分就够好好消化一阵子的.其中,令我非常头大的一组概念,就是协变性和逆变性(统称可变性). 一.可变性的概念 C# 一开始就支持数组的协变,听说是为了和 Java 竞争于是就把 Java 的这个不怎么样的特性给实现了.看如下代码, object[] myArray…
最近在学习使用Scala语言做项目,感觉这门语言实在是太优美了!作为一个本科数学.研究生机器学习专业的混合人才(哈哈),这门语言真的是满足了普通计算机编程(告诉计算机怎么做)和函数式编程(告诉计算机做什么)的所有幻想.学了半个多月,根本停不下来!先来做个总结: 语法简洁,往往比Java少至少一半的代码量.比如: 支持自动类型判断,可以省去很多类型标志. e.g.  val x = 2 用伴生对象来生成类,省去new的麻烦.e.g. val cat = Cat("Hello Ketty"…