C# 接口和抽象类

一、接口

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)抽象类中的成员可以添加访问修饰符,但接口中的成员默认是公共的,定义是不能加修饰符。

发布了141 篇原创文章 · 获赞 194 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/kenjianqi1647/article/details/102530567