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

推荐订阅源

The Cloudflare Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
小众软件
小众软件
J
Java Code Geeks
V
Visual Studio Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
美团技术团队
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
博客园 - 叶小钗
N
Netflix TechBlog - Medium
月光博客
月光博客
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
T
The Exploit Database - CXSecurity.com
The Hacker News
The Hacker News
Cisco Talos Blog
Cisco Talos Blog
Hacker News: Ask HN
Hacker News: Ask HN
Hacker News - Newest:
Hacker News - Newest: "LLM"
AWS News Blog
AWS News Blog
Webroot Blog
Webroot Blog
The Last Watchdog
The Last Watchdog
T
Threatpost
I
Intezer
T
Tenable Blog
L
LINUX DO - 热门话题
T
Tailwind CSS Blog
Scott Helme
Scott Helme
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Cybersecurity and Infrastructure Security Agency CISA
Engineering at Meta
Engineering at Meta
S
Schneier on Security
Recent Announcements
Recent Announcements
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
F
Fortinet All Blogs
腾讯CDC
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Troy Hunt's Blog
量子位
H
Hacker News: Front Page
V2EX - 技术
V2EX - 技术
Google Online Security Blog
Google Online Security Blog
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
博客园 - Franky
www.infosecurity-magazine.com
www.infosecurity-magazine.com

博客园 - wzc998

Oracle Audit 关于"cannot perform a DDL, commit or rollback inside a query or DML" 错误 关于varchar2在pl/sql和schema级别的最大值 ORA-01031 权限不足错误的解决 通过代码备份存储过程,package body 和表数据 并还原 XSL ASP .net实现松耦合事件的三种方法 Log4net不同版本在app.config和web.config的配置区别 SQL*Loader FAQ 【转】NLS 视图的研究 oracle多语言环境下to_date时间转换问题 【转】如何使用 ADO.NET 和 Visual C# .NET 调用带参数的存储过程 【转】SQL SERVER 存储过程学习笔记 【转】代码复用原则:合理使用类组合和类继承 IOC 【转】范式 【转】oracle范式与交叉表 oracle存储过程返回交叉表(使用存储过程/高级语言调用)
委托与接口的关系
wzc998 · 2010-08-26 · via 博客园 - wzc998

约束和约定的关系:

  1,约束的哲学是你继承什么(约束)你就是什么。约定的哲学是你能做什么(满足什么约定)你就是什么。

  2,约定比约束要灵活。

一则招聘信息:提到“本科学位”是一种约束。一个实现了“I国家认可本科毕业”接口的的学位证书才是本科学位,即符合该招聘的约束。

另一则招聘信息:提到“英语六级水平相当”是一种约定,一个没有大学文凭却达到英语六级水平的应聘者都符合这个招聘约定。

所以约定比约束更容易被满足,因此实现起来更灵活和方便。

委托和接口的关系:

  接口:是对象的约束

  委托:即是方法的约束,又是方法的约定

  1,它们都能将规范(specification)与实现(implementation)在代码上分开,以此实现代码的灵活性和可重用性。(这是OOP最重要的抽象机制之一,如果认识不到这一点,说明对OOP的理解还停留在表面的语法上) 

  2,在定义的时候委托与接口一样要体现约束信息,而在使用的时候委托是灵活的只要符合约定即可。

举例,一个记日志的委托分离了日志实现,a.Logging = 某个委托。任何传入参数类型为string、返回void的委托都能出现在上式的右边,这体现了委托作为方法的约定。但是任何传入参数类型不为string或者返回值不是void的委托都不能出现在上市右边,这体现了委托作为方法的约束

  3,委托比接口更灵活和更方便的地方有:实现类型是匿名的,方法是匿名的,方法可以是静态的,方法还可以复合等等。但委托能做的事接口都能做,只是麻烦一些,接口能做的委托却不一定能做。比如委托不能包含两个以上的不同规范的方法,也不能定义子类型等等。

再说委托:

委托拥有C和C++中的函数指针的血缘。在.net时代,微软把委托改造成了既不失灵活性又增加了语法上的规范性,这样一个“函数指针”。

接口和委托,他们的级别完全不一样,用法就更不一样了。他们各有优势没有高下,如果说委托是点的标准,那么接口就是面的标准。

题外话:

约束有强弱之分。越强的约束越安全,静态性越强,受编译器的支持越大(c#就是);反之,越弱的约束,动态性越强,运行时灵活性越大(动态语言)。