①接口不包含任何实现,接口没有构造方法,所有成员都是public的,用接口来定义类,规范类,抽象类,而类则负责功能的具体的实现。接口里面所有的东西都是抽象的。
②抽象类是不完全的类,里面有抽象的方法和属性,也可以有具体的方法和属性。
③类里面则都是方法和属性的实现。
C#中一个类只可以派生于一个类,而可以实现多个接口。一个类派生于另一个类就是借用了另一个类中的已经实现的功能。一个类实现了一个接口,这个类就做出了一个承诺,必须实现接口中所有的功能(类实现了接口就表示给这个类加了一个规范,类必须遵循规范中的所有条例)。
接口是设计用的,而类是用来实现设计好的功能。接口中除去方法还可以包含属性,索引器,事件。不可以包含常量,域,构造函数,析构函数,静态成员。(这些都不太懂)
所有抽象的东西必须被实现:
一个类派生于另一个类或者实现一个或多个接口,那么基类和接口中所有抽象的方法,属性必须被派生类做覆盖(接口中所有东西都是抽象的,而抽象类中有部分是抽象的)。
2. 类实现接口的方法
抽象类,用来说明其派生类是什么,称之为“Is-a”原则。
接口,用来说明其派生类能做什么,称之为“Can-Do”原则。
3. 抽象类和接口的区别
class A {
public A() {
Print();
}
public virtual void Print() { }
}
class B : A {
int x = 1;
int y;
public B() {
y = 2;
}
public override void Print() {
Console.WriteLine("x=" + x + " y=" + y);
}
}
这道面试题如上,问题是当实例化B的时候会输出什么?
5. OO中的继承分析
6. 一个关于接口的案例
之前一直不知道接口的作用到底是什么,看了几篇文章以后,终于有点觉悟了,下面是一个自己写的Demo:
//USB接口
public interface USB {
void ChargeForPhones();
}
//诺基亚手机
public class Nokia : USB {
#region USB Members
public void ChargeForPhones()
{
Console.WriteLine("Charge for Nokia Phones!");
}
#endregion
}
//摩托手机
public class Moto:USB {
#region USB Members
public void ChargeForPhones()
{
Console.WriteLine("Charge for Moto Phones!");
}
#endregion
}
//一台专门为带USB接口的设备充电的设备
public class Charger {
public void Charge(USB usb) {
usb.ChargeForPhones();
}
}
class Program
{
static void Main(string[] args)
{
//现在有一台专门为USB接口的设备充电的机器
Charger charger = new Charger();
//又有一部诺基亚的手机(该手机是USB接口的)
USB NokiaWithUsb = new Nokia();
//现在为诺基亚手机充电
charger.Charge(NokiaWithUsb);
//同样如果又有一部摩托的手机也要充电,那么只要是实现了USB接口的,同样也可以用这台充电机器给它充电
USB MotoWithUsb = new Moto();
charger.Charge(MotoWithUsb);
}
}
这里的USB接口中的方法可以理解为每一种具有USB接口的手机或者其它在充电的时候在屏幕上面显示什么,这个每个牌子的都会自己设计(就是手机中的实现USB接口的方法ChargeForPhones)。