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

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
C
Check Point Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
F
Full Disclosure
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
博客园 - 司徒正美
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
V
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
O
OpenAI News
Jina AI
Jina AI
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
I
InfoQ
D
Docker
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
博客园 - Franky
B
Blog
Scott Helme
Scott Helme
博客园 - 叶小钗
D
DataBreaches.Net

博客园 - Jeri

玩转 H5 下拉上滑动效果 移动H5前端性能优化指南 网站测试清单(转) 分布式缓存概述 SQL循环语句示例 Kconfig文件的作用 转载goahead webserver源码分析 Vista中使用netsh wlan命令行配置无线网络 Linux操作系统下VI编辑器常用命令介绍 - Jeri - 博客园 .net防注入铁盾--亲手教你ASP.NET中如何防止注入攻击 vs2005项模板和项目模板丢失的解决办法(转) Asp.net(c#)导出有表格线的Excel 对.NET的GC(垃圾回收)的理解都存在错误认识 MSSQL如何快速清除数据库日志 数据库查询优化原则(转) 类型或命名空间名称“Web”在类或命名空间“Microsoft”中不存在(是否缺少程序集引用?) 贡献一个新浪的幻灯片(javascript) (转) - Jeri - 博客园 .NET之对接口和抽象类(二) 国外C#开源系统一览表 ,C# Open Source
.NET之对接口和抽象类(一)
Jeri · 2008-02-11 · via 博客园 - Jeri

转自http://www.diybl.com/

什么是.NET接口

.NET接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。接口方法不能包含任何实现,CLR允许接口可以包含事件、属性、索引器、静态方法、静态字段、静态构造函数以及常数。但是注意:C#中不能包含任何静态成员。一个类可以实现多个接口,当一个类继承某个接口时,它不仅要实现该接口定义的所有方法,还要实现该接口从其他接口中继承的所有方法。

定义方法为:

public interface System.IComparable
{
 
int CompareTo(object o);
}


public class TestCls: IComparable
{
 
public TestCls()
 
{
 }

 
private int _value;
 
public int Value
 
{
  
get return _value; }
  
set { _value = value; }
 }

 
public int CompareTo(object o)
 
{
  
//使用as模式进行转型判断
  TestCls aCls = o as TestCls;
  
if (aCls != null)
  
{
    
//实现抽象方法
    return _value.CompareTo(aCls._value);
  }

 }

}


什么是.NET抽象类

  .NET抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法。抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能被密封。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。另外,实现抽象方法由overriding方法来实现。

定义方法为:

Code

  3. 相同点和不同点

  3.1 相同点

  都不能被直接实例化,都可以通过继承实现其抽象方法。

  都是面向抽象编程的技术基础,实现了诸多的设计模式。

  3.2 不同点

  接口支持多继承;抽象类不能实现多继承。

  接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。

  接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。

  接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。

  接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。

  接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。

  通过相同与不同的比较,我们只能说接口和抽象类,各有所长,但无优略。在实际的编程实践中,我们要视具体情况来酌情量才,但是以下的经验和积累,或许能给大家一些启示,除了我的一些积累之外,很多都来源于经典,我相信经得起考验。所以在规则与场合中,我们学习这些经典,最重要的是学以致用,当然我将以一家之言博大家之笑,看官请继续。

  3.3 规则与场合

  请记住,面向对象思想的一个最重要的原则就是:面向接口编程。

  借助接口和抽象类,23个设计模式中的很多思想被巧妙的实现了,我认为其精髓简单说来就是:面向抽象编程。