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

推荐订阅源

V
Visual Studio Blog
Google DeepMind News
Google DeepMind News
V
V2EX
B
Blog RSS Feed
有赞技术团队
有赞技术团队
博客园 - Franky
美团技术团队
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
云风的 BLOG
云风的 BLOG
L
LangChain Blog
GbyAI
GbyAI
The Cloudflare Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
博客园 - 【当耐特】
The Register - Security
The Register - Security
大猫的无限游戏
大猫的无限游戏
D
Docker
Vercel News
Vercel News
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
N
Netflix TechBlog - Medium
博客园_首页
A
About on SuperTechFans
J
Java Code Geeks
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
Recent Announcements
Recent Announcements
G
Google Developers Blog
小众软件
小众软件
博客园 - 叶小钗
WordPress大学
WordPress大学
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Martin Fowler
Martin Fowler
S
SegmentFault 最新的问题
F
Full Disclosure
Jina AI
Jina AI
H
Help Net Security

博客园 - 杨连国

win10 IoT开发 Serial​Device 返回 null .NET Delegates: A C# Bedtime Story【转载】 C++ 和 C# 变量定义的一点区别 变量定义 生成器模式(builder) 类型和成员基础(CLR via C#) 基本类型、引用类型、值类型——(CLR via C#) 抽象工厂模式(abstract factory) 李建忠C#面向对象设计模式纵横谈 —— 单件模式 李建忠C#面向对象设计模式纵横谈 —— 面向对象设计模式与原则 程序设计和重构的目标 OO设计原则——读《你必须知道的.NET》 输入法灰掉bug解决 半角全角Bug解决 由迭代模式想到得——用设计模式理解 .NET ASCII 表设计之妙 调用VC封装的DLL时,两个类型匹配问题 调用非托管Dll Invoke 和 BeginInvoke 的区别
接口(CLR via C# 读书笔记)
杨连国 · 2008-07-29 · via 博客园 - 杨连国
 

小点滴:之间考虑程序性能的时候,总是用TickCount来计算自己算法的耗时问题,但是它只能精确到毫秒。看CLR via C# 留意到 StopWatch 这个类,就是专门干这个事的,不错,精度还高,以后就用它了。

接口:

1、 规定:C#支持多接口继承,但不支持多类继承。

2、 C# 接口可以定义方法签名外,还可以定义属性、事件、索引,因为它们背后对应的都是方法。但是C#不支持静态方法(尽管CLR支持,但CLS不支持)。

3、 接口可以相互“继承”,其实这里的继承的味道已经变了,而是有点“联合约定”的味道。

4、 C#编译器要求接口的实现必须声明为public,并且CLR要求该方法应该声明为virtual,如果你没有在源代码上显示标注virtual关键字,编译器会在编译时为其添加virtualsealed关键字,这阻止子类覆写该方法;如果你显示标注了virtual在源码处,编译器是不会再添加sealed关键字的,所以这就允许了子类覆写该方法。

对于sealed接口方法,尽管子类不能覆写,但是子类可以再次继承同一接口,然后实现自己的方法,在具体应用的时候,会调用哪一个就看变量类型了。(但是要注意,应该给子类的同名方法加new 关键字,使其屏蔽父类的方法。)

5、 接口的显示实现:通常情况下,继承接口的类只要实现一个和接口一样方法签名的函数就可以了,编译器会知道两者之间的关联;另外一种情况,通过添加接口类名显示指明实现了哪个接口,这该情况下,不允许对该函数实现获取修饰符(如publicprivate),也不允许使用virtual修饰,编译器会将其编译为privat virtual sealed,也就是说既不能继承,也不能通过类的实例变量调用,只能通过接口变量的方式调用到它。书上还说其,不是一个正常的类方法,通过查看IL代码发现在函数体内多了.override [mscorlib]System.IDisposable::Dispose这么一句话,具体情况还没搞懂。

6、 泛型接口:这里有两点我感觉比较有意思,一是说如果有泛型,就尽量不要用以前的非泛型,因为非泛型为了实现通用性,参数变量往往是object类型,存在安全隐患和拆装箱子的问题。之所以还存在大量的非泛型应用是因为考虑向前兼容。二是继承泛型接口可以因为type的不同,而对同一泛型接口当作两接口。例如:

// this class implements the generic IComparable<T> interface twice

       public sealed class Number : IComparable<Int32>,IComparable<String>

       {

              // 代码省略

}

7、 泛型条件限制:不多说了,这属于泛型的问题,但是可以解决值类型装箱的问题,具体查书。

8、 解决两个接口存在同名函数(方法签名也相同)的问题,可以使用接口显示声明解决。

9、 书上说使用显示接口有很多问题,慎用!看了看确实,如果不是非使用其不解决的问题,就尽量不用。

10、关于设计基类还是设计接口的问题:基本原则是IS-A 还是Can-Do,从书上的意思好像比较倾向于说基类设计好。(具体情况具体分析吧)。