一、接口
1、C#的接口可以实现多重继承的功能。
接口的实现是通过类继承实现的,一个类虽然只能继承一个基类,但是可以继承任意多个接口。
2、接口的语法格式:
修饰符 interface 接口名称:继承的接口列表
{
接口内容;
}
3、接口的特征
(1)接口类类似于抽象基类:继承接口的任何类型都必须实现接口的所有成员。
(2)接口中不能包括构造函数,因此不能直接实例化接口。
(3)接口可以包含属性,方法,索引器和事件。
(4)接口中只能定义成员,不能实现成员。
(5)接口中定义的成员不允许加访问修饰符,因为接口成员是公共的。
(6)接口中的成员不能声明为虚拟或静态。
4、接口应用举例:
interface IMyInterface //定义接口
{
// 接口成员
void MethodToImplement();
}
class InterfaceImplementer : IMyInterface //定义InterfaceImplementer接口,继承自IMyInterface接口
{
static void Main()
{
InterfaceImplementer iImp = new InterfaceImplementer();
iImp.MethodToImplement();
}
public void MethodToImplement()//实现 接口MethodToImplement方法
{
Console.WriteLine("MethodToImplement() called.");
}
}
二、抽象类
1、C#中用关键字abstract来声明一个类为抽象类,抽象类不能实例化。在C++中通过声明一个纯虚函数来使一个类变成抽象类,同样不能实例化。
C#中抽象类的语法格式:
访问修饰符 abstract class 类名:基类或接口
{
//类成员
}
2、抽象类与非抽象类的区别:
抽象类主要用来提供多个派生类可共享的基类的公共定义。
(1)抽象类不能直接实例化。
(2)抽象类中可以包含抽象成员,但非抽象类中不可以。
(3)抽象类不能被密封。
3、抽象类中构造函数的作用:初始化抽象类的成员和为继承自它的子类使用。
4、抽象方法:(类似于C++的纯虚函数)
抽象方法必须声明在抽象类中,抽象方法不提供具体的实现,引入抽象方法的原因在于抽象类本身是一个抽象的概念,有的方法不需要具体的实现,而是留下来让派生类重写实现。
声明抽象方法时:不能使用virtual ,static,private修饰符。
public abstract class Test
{
public abstact void ABSMethod();//抽象方法
}
5、应用举例
public abstract class Market //抽象类
{
public string Name{get ;set};
public abstract void Shop();//抽象方法
}
public class WallMarket:Market //继承抽象类
{
public override void Shop() //重写抽象方法
{
Console.WriteLine(Name);
}
}
class Program
{
Market market=new WallMarket();//使用派生类对象创建抽象类对象
//注意:抽象类不能直接实例化
market.Name="WLM";
market.Shop();
}
三、抽象类和接口的区别
抽象类和接口都包含可以由子类继承实现的成员,抽象类是对根源的抽象,而接口是对动作的抽象。
(1)派生类只能继承一个抽象类,但可以继承任意多个接口。
(2)抽象类中可以定义成员的实现,但接口中不可以。
(3)抽象类中可以包含字段、构造函数、析构函数、静态成员或常量等,接口不可以。
(4)抽象类中的成员可以添加访问修饰符,但接口中的成员默认是公共的,定义是不能加修饰符。