• 什么是接口?

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

  • 什么是抽象类?

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

相同点
•都不能被直接实例化,都可以通过继承实现其抽象方法。
•都是面向抽象编程的技术基础,实现了诸多的设计模式。
不同点
•接口支持多继承;抽象类不能实现多继承。
•接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。
•接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。
•接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。
•接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。 
•接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。

using System;

namespace codeTest
{
class Program
{ static void Main(string[] args)
{
Animal _Cat = new Cat();
Console.WriteLine(_Cat.GetName());
IAnimal _Dog = new Dog();
Console.WriteLine(_Dog.GetName());
//_Dog.Move();
IMove _DogMove = new Dog();
//Console.WriteLine(_DogMove.GetName());
_DogMove.Move();
Console.ReadLine();
} } interface IAnimal
{
//接口不能保护字段
//string Name;
//字段自可以包含属性
string Name { get; set; }
string GetName() ;
int GetAge();
} interface IMove
{
void Move();
} public class Dog : IAnimal, IMove
{
//接口可以多继承
public string Name { get; set; } public string GetName()
{
return "Dog";
} public int GetAge()
{
return ;
} public void Move()
{
Console.WriteLine("Move!");
}
} public abstract class Animal
{
//抽象类可以有字段和属性
string NameField;
string NameProperty { get; set; } public abstract string GetName();
public abstract int GetAge(); } public class Cat : Animal
{ public override string GetName()
{
return "Cat";
} public override int GetAge()
{
return ;
}
}
}

最新文章

  1. 微信扫码支付~官方DEMO的坑~参数不能自定义
  2. 小结一下:javascript 金额计算
  3. 一个动画 Label (走马观花)
  4. 利用Bundle在activity之间传递对象
  5. HackPorts – Mac OS X 渗透测试框架与工具
  6. Perl中的特殊内置变量详解
  7. POJ 3308 Paratroopers(最小割EK)
  8. Load Balance Tomcat with Nginx and Store Sessions in Redis--reference
  9. jsp定时方法
  10. 解决Robotium测试用例crash问题
  11. Java线程池详解
  12. 初窥c++11:lambda函数及其用法
  13. Windows Server 2016-图形化备份域控制器
  14. vue开发项目详细教程(第一篇 搭建环境篇)
  15. jQuery 事件绑定
  16. openstack项目【day24】:KVM部署
  17. Paper | 学习多任务中的最佳分/ 合结构(十字绣结构)
  18. 还没被玩坏的robobrowser(3)——简单的spider
  19. dirname的用法:获取文件的父级目录路径
  20. Go第七篇之规范的接口

热门文章

  1. Caffe学习系列(10):命令行解析
  2. SQL 多表一起查询的语句总结
  3. 30秒攻破任意密码保护的PC:深入了解5美元黑客神器PoisonTap
  4. 项目:DoubleFaceCamera
  5. uploadify插件的功能应用
  6. backbone调试
  7. 【leetcode】Binary Tree Zigzag Level Order Traversal
  8. mount --bind 重启后失效的解决办法
  9. ACM/ICPC 之 "嵌套"队列 -插队(POJ2259)
  10. 20. javacript高级程序设计-JSON