惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
Vercel News
Vercel News
U
Unit 42
L
LangChain Blog
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
F
Fortinet All Blogs
小众软件
小众软件
I
InfoQ
P
Proofpoint News Feed
D
DataBreaches.Net
Martin Fowler
Martin Fowler
H
Help Net Security
T
Tailwind CSS Blog
N
Netflix TechBlog - Medium
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
B
Blog RSS Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog

博客园 - 毛尹航

GAMES202课程资源 游戏设计制作配置表原则 Unity中文字和图片混合 UI仔需要了解的坑 遇到大段ifelse不要慌,先分层让条件正交 NGUI文字破碎 一个可以用的Lua的Class函数 写一个可以用的Lua打印Table的函数 C#中接口是值类型还是引用类型? Unity3d笔试题大全 FPSCalc——简单FPS观测类 GameObjectPool——Unity中的对象池 MonoSingleton——Unity中的单例模式 用非递归、不用栈的方法,实现原位(in-place)的快速排序 一道有序洗牌的笔试题,阿里\UC等都用过 - 毛尹航 - 博客园 MFC中显示图像的放大、缩小、移动功能 MFC中设置对话框/窗体大小固定 MFC【5】MFC集合类 MFC【6】文件I/O和串行化
关于C#的接口的碎碎念
毛尹航 · 2021-07-08 · via 博客园 - 毛尹航

首先明确两件事情,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这种接口要干嘛啊?

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