C# abstract与interface区别

20 篇文章 0 订阅
3 篇文章 0 订阅

一 abstract:

abstract修饰类,表示抽象类
抽象类有以下特征:
不能实例化
抽象类可以包含抽象的方法、属性、索引器及事件。但是抽象类也可以包含非抽象成员。
派生自抽象类的类必须实现抽象类的所有抽象成员。
abstract修饰方法、属性、索引器及事件(这里我们以抽象方法来讲解,抽象属性、索引器及事件类似)。
抽象方法具有以下特征:
抽象方法是隐式的虚方法,但它与虚方法不同,虚方法在派生类既可以用override进行重写,也可以不重写。但是抽象方法在派生类中是必须用override来进行重写的。
只允许在抽象类中使用抽象方法声明。

二 interface:

interface可以定义“接口类型变量”,就好像类可以定义类类型的变量(或者说是引用类型变量)。申明一个类类型的变量,然后我们通常使用构造器创建对象,并把该对象赋值给类类型的变量(或者说引用变量引用到我们创建的对象)。这样,我们就可以通过类类型的变量来操作我们实际new出来的对象。于此类似的,我们也可以创建接口类型的变量(或者说是接口类型的引用变量),并把一个实现了该接口的实现类的对象赋值给接口类型的引用变量(或者说接口类型的引用变量引用到该接口实现类的对象)。通过接口类型的变量,我们便可以调用实现了该接口的类的对象。从这看出,类和接口有相似的地方。它们都有多态的存在法声明。

三 接口和抽象类的区别:

1.接口用于规范,抽象类用于共性。
抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。
2.接口中只能声明方法,属性,事件,索引器。
而抽象类中可以有方法的实现,也可以定义非静态的类变量。
抽象类可以提供某些方法的部分实现,接口不可以。抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的。
3.在抽象类中加入一个方法,那么它的子类就同时有了这个方法。
而在接口中加入新的方法,那么实现它的类就要重新编译(这就是为什么说接口是一个类的规范了)。
4.接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)。
5.此外接口不能保护字段、构造函数、析构函数、静态成员或常量。

四:应用场景实例:

我们定义一个水果类和蔬菜类,其中水果类包含各种的水果,蔬菜类包含各种蔬菜。
问题:按照常理,卖水果的直接引用水果类,卖蔬菜的引用蔬菜类。当有家超市既卖水果又卖蔬菜。这时我们就需要用到接口来实现。
以下列出接口和抽象类代码例子:
1.抽象类:基类只能继承一个父类 (卖水果的只能卖水果,卖蔬菜的只能卖蔬菜。)

  public abstract  class IFruits
    {
        public abstract string apple();
    }
    public abstract class IVegetables
    {
        public abstract string potato();
    }
    public class Fruits : IFruits
    {
        public override string apple()
        {
            throw new NotImplementedException();
        }
    }
    public class Vegetables : IVegetables
    {
        public override string potato()
        {
            throw new NotImplementedException();
        }
    }

2.接口:类可以引用多个接口(一个商店可以同时可以卖蔬菜和水果。)

 public interface   IFruits
    {
          string apple();
    }
    public interface IVegetables
    {
          string potato();
    }
    public class Shop : IFruits, IVegetables
    {
        public string apple()
        {
            throw new NotImplementedException();
        }

        public string potato()
        {
            throw new NotImplementedException();
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值