zoukankan      html  css  js  c++  java
  • 关于C#的接口的碎碎念

    首先明确两件事情,1.C#的接口是引用类型的。2.值类型转引用类型时会发生装箱。

    这样在我们设计一个容器类的时候大概率会遇到这种事:

    我们希望继承某个接口用以表明身份,比如IEnumerable 或 IEnumerable<>这样我们需要一个GetEnumerator方法,然而我们又发现该接口的迭代器返回类型为IEnumerator<>,这时,如果我们老老实实的实现一个返回IEnumerator<>的GetEnumerator时会发现我们应该new了一个class,敏感的你肯定会感觉到此时会产生GC。尽管这个GC的量不会太大,副反应也不会真的严重到影响你程序的运行,但是,你知道确实有不产生GC的写法。让GetEnumerator返回一个Struct。你知道只要这个Struct继承一个IEnumerator就可以让foreach正常跑起来,也没有GC,假如你写的对,运行时一切完美。但是我们的代码?已经有很多看起来坑坑洼洼的地方了。就像下面那样。

     IEnumerator IEnumerable.GetEnumerator(){throw new NotImplementedException();
    

    这个时候我就会纳闷,我当初费劲巴拉继承IEnumerable这种接口要干嘛啊?

    所以说,面向接口编程有时还真是挺蛋疼的。

  • 相关阅读:
    cocos2d-x 3.0 事件分发机制
    cocos2d-x Schedule详解
    OSG设置警告等级
    OSG四元数与欧拉角之间的转换
    编译OSG_FBX插件
    RakNet发送与接收数据
    RakNet基本教程
    IE不能上网,但是其他浏览器可以
    OSG计时器与时间戳
    添加OSG各种事件处理器
  • 原文地址:https://www.cnblogs.com/fastcam/p/14987446.html
Copyright © 2011-2022 走看看