当前位置: 首页 > news >正文

电子商务网站建设参考文献2018网站收录申请

电子商务网站建设参考文献2018,网站收录申请,顶尖的郑州网站建设,收录情况逆变#xff08;contravariant#xff09;与协变#xff08;covariant#xff09;是C#4新增的概念#xff0c;许多书籍和博客都有讲解#xff0c;我觉得都没有把它们讲清楚#xff0c;搞明白了它们#xff0c;可以更准确地去定义泛型委托和接口#xff0c;这里我尝试画…逆变contravariant与协变covariant是C#4新增的概念许多书籍和博客都有讲解我觉得都没有把它们讲清楚搞明白了它们可以更准确地去定义泛型委托和接口这里我尝试画图详细解析逆变与协变。 变的概念 我们都知道.Net里或者说在OO的世界里可以安全地把子类的引用赋给父类引用例如 //父类 子类 string str string; object obj str;//变了而C#里又有泛型的概念泛型是对类型系统的进一步抽象比上面简单的类型高级把上面的变化体现在泛型的参数上就是我们所说的逆变与协变的概念。通过在泛型参数上使用in或out关键字可以得到逆变或协变的能力。下面是一些对比的例子 协变Foo父类 Foo子类  //泛型委托 public delegate T MyFuncAT();//不支持逆变与协变 public delegate T MyFuncBout T();//支持协变MyFuncAobject funcAObject null; MyFuncAstring funcAString null; MyFuncBobject funcBObject null; MyFuncBstring funcBString null; MyFuncBint funcBInt null;funcAObject funcAString;//编译失败MyFuncA不支持逆变与协变 funcBObject funcBString;//变了协变 funcBObject funcBInt;//编译失败值类型不参与协变或逆变//泛型接口 public interface IFlyAT { }//不支持逆变与协变 public interface IFlyBout T { }//支持协变IFlyAobject flyAObject null; IFlyAstring flyAString null; IFlyBobject flyBObject null; IFlyBstring flyBString null; IFlyBint flyBInt null;flyAObject flyAString;//编译失败IFlyA不支持逆变与协变 flyBObject flyBString;//变了协变 flyBObject flyBInt;//编译失败值类型不参与协变或逆变//数组 string[] strings new string[] { string }; object[] objects strings;逆变Foo子类 Foo父类 public delegate void MyActionAT(T param);//不支持逆变与协变 public delegate void MyActionBin T(T param);//支持逆变public interface IPlayAT { }//不支持逆变与协变 public interface IPlayBin T { }//支持逆变MyActionAobject actionAObject null; MyActionAstring actionAString null; MyActionBobject actionBObject null; MyActionBstring actionBString null; actionAString actionAObject;//MyActionA不支持逆变与协变,编译失败 actionBString actionBObject;//变了逆变IPlayAobject playAObject null; IPlayAstring playAString null; IPlayBobject playBObject null; IPlayBstring playBString null; playAString playAObject;//IPlayA不支持逆变与协变,编译失败 playBString playBObject;//变了逆变来到这里我们看到有的能变有的不能变要知道以下几点 以前的泛型系统或者说没有in/out关键字时是不能“变”的无论是“逆”还是“顺协”。当前仅支持接口和委托的逆变与协变 不支持类和方法。但数组也有协变性。值类型不参与逆变与协变。 那么in/out是什么意思呢为什么加了它们就有了“变”的能力是不是我们定义泛型委托或者接口都应该添加它们呢 原来在泛型参数上添加了in关键字作为泛型修饰符的话那么那个泛型参数就只能用作方法的输入参数或者只写属性的参数不能作为方法返回值等总之就是只能是“入”不能出。out关键字反之。 当尝试编译下面这个把in泛型参数用作方法返回值的泛型接口时 public interface IPlayBin T {T Test(); }出现了如下编译错误 错误 1 方差无效: 类型参数“T”必须为“CovarianceAndContravariance.IPlayBT.Test()”上有效的 协变式。“T”为 逆变。 到这里我们大致知道了逆变与协变的相关概念那么为什么把泛型参数限制为in或者out就可以“变”呢下面尝试画图解释原理。 协变不是理所当然的逆变也没有“逆” 我们先来看看不支持逆变与协变的泛型把子类赋给父类再执行父类方法的具体流程对于这样一个简单的例子的Test方法 public interface BaseT {T Test(T param); } public class SubT : BaseT {public T Test(T param) { return default(T); } } Basestring b new Substring(); b.Test();它实际的流程是这样的 即调用父类的方法其实实际是调用子类的方法。可以看到这个方法能够安全的调用需要两个条件 1.变式父的方法参数能安全转为原式子的 参数 2.原式子的返回值能安全的转为变式的返回值。不幸的是参数的流向跟返回值的流向是相反的所以对于既是in又是out的泛型参数来说肯定 是行不通的其中一个方向必然不能安全转换的。例如对上面的例子我们尝试“变” Baseobject BaseObject null; Basestring BaseString null; BaseObject BaseString;//编译失败 BaseObject.Test();这里的“实际流程”如下可以看到参数那里是object是不能安全转换为string所以编译失败 看到这里如果都明白的话我们不难得到逆变与协变的”实际流程图”记住它们是有in/out限制的: 可以看到从”实际流程图”来看逆变根本没有“逆”都离不开只能安全地把子类的引用赋给父类引用这个根本。 来到这里应该基本理解逆变与协变了不过装配脑袋的这篇文章有个更高级的问题原文也有解答这里我用上面画图的方式去理解它。 图解逆变与协变的相互作用 问题的提出你知道那个正确吗 public interface IBarin T { } //应该是in public interface IFooin T {void Test(IBarT bar); } //还是out public interface IFooout T {void Test(IBarT bar); }答案是如果是in的话会编译失败out才正确当然不要泛型修饰符也能通过编译但IFoo就没有协变能力了。这里的意思就是说一个有协变逆变能力的泛型IBar作为另一个泛型IFoo的参数时影响到了它IFoo的泛型的定义。乍一看以为是in的其中一个陷阱是T是在 Test方法的参数里的所以以为是in。但这里Test的参数根本不是T而是IBarT。 我们画个图来理解它。既然out可以通过那么它的“协变流程图”应该如下 图跟前面那些大致一样但理解它要跟问题相反上面问题是先定义好IBar再去定义IFoo。 1.我们定义好一个有协变能力的IFoo,这是前提。 2.可以推出上面的流程是成立的。 3.这个流程重点是参数流向要使整个流程成立就必须使IBarstring IBarobject成立这不就是逆变吗整个结论就是有协变能力的IFoo要求它的泛型参数IBar有逆变能力。其实根据上面的箭头也可以理解因为原式和变式的变向跟参数的变向是相反的导致了它们要有相反的能力这就是装配脑袋文章说的方法参数的协变-反变互换原则。根据这个原理也很容易得出如果Test方法的返回值是IBarT而不是参数那么就要求IBarT要有协变能力因为返回值的箭头与原式和变式的变向的箭头是同向的。 The End
http://www.zqtcl.cn/news/185111/

相关文章:

  • 网站建设好学么模版型网站是怎样的
  • 网站维护建设费应计入科目高端营销型网站制作
  • 推荐几个好的网站wordpress 加载数据库表格也卖弄
  • 承德网站开发找人做网站安全吗
  • 百度网站推广电话眼镜网站怎么做竞价
  • 邢台建设银行官方网站为什么建设网站很多公司没有
  • 闵行做网站费用湖南正规网络营销哪家便宜
  • 找个公司做网站需要注意什么wordpress用户名长度
  • 推荐几个没封的正能量网站营销技巧和营销方法视频
  • html mip 网站桂林市临桂区
  • 做网站如何月入10万建行app怎么注册登录
  • 建设一个旅游网站毕业设计建设网站的功能定位是什么原因
  • wordpress网站导航模板杭州建设网站的公司
  • 如何做视频解析网站wordpress 关闭评论
  • 安福网站建设微信开发者工具怎么下载
  • 网罗设计网站威海网页设计制作公司
  • 网站用cmswordpress插件怎么做
  • 如何办好公司网站元器件网站搭建
  • 建设领域行政处罚查询网站wordpress数据库发文章
  • 怎么做网页的多开器宿迁seo优化
  • 别人帮做的网站怎么修改病句店铺引流的30种方法
  • 网站备案幕布怎么申请绍兴cms建站模板
  • 做网站熊掌号软件设计公司排名
  • 深圳 做网站学做西点的网站
  • 静态网站安全性百度服务平台
  • 网站vi设计公司网站建设app
  • 书店网站建设策划书总结每天看七个广告赚40元的app
  • 做网站的属于什么专业成都广告制作安装公司
  • 天津市网站建设公司网站制作费用
  • 网站制作公司 郑州wordpress图片中文不显示解决