接口跟抽象类的区别与联系

接口与抽象类的区别
本文详细对比了接口和抽象类的相同点与不同点,包括它们在契约规范、功能强调、成员约束、继承特性及修饰符使用上的差异,是理解面向对象编程中高级概念的重要资源。

相同点

1.首先接口跟抽象类都是引用类型,本身的地址都在堆上,里面的值在栈上。

2.其次接口跟抽象类都是起到契约约束的作用,是对相同的某些内容进行了契约规定。

3.再者接口跟抽象类都可以对 方法、事件、属性 进行契约定义。

不同点

1.抽象类强调的是一种类的契约规范,is a ,强调是什么;而接口强调的是具备什么功能,强调具备什么能力的汇总集合。

2.抽象类可以约束 类型(委托)、字段;接口无法声明 类型(委托)、字段。

3.抽象类只能单继承,继承后抽象类后,对于属性执行继承,对于方法增需要重写;

   接口可以多继承,继承接口后,需要实现相应的接口的内容。

4.接口中的 方法、事件、属性 不需要修饰符;抽象类中的方法、事件、属性不需要修饰符。


/*----------------------------------------------------------------
* 作 者 :姜 彦
* 项目名称 :Learn
* 类 名 称 :interface 
* 命名空间 :Learn
* CLR 版本 :4.0.30319.42000
* 创建时间 :2019/2/21 12:55:04
* 当前版本 :1.0.0.1
* My Email :jiangyan2008.521@gmail.com
*            jiangyan2008.521@qq.com
* 描述说明: 接口与抽象类的区别很联系
*
* 修改历史:
*
*******************************************************************
* Copyright @ JiangYan 2019. All rights reserved.
*******************************************************************
------------------------------------------------------------------*/


using System;

namespace Decorator
{

    public enum AllTestType:int
    {       
        Normal=0,       
        Err=1,
    }

    public delegate void OnExceptionedEventHandler(object sender,EventArgs e);   

    interface IContent
    {
        int Add(int a, int b);
        
        event OnExceptionedEventHandler OnExceptioned;     
        string Age { get; set; }   
        AllTestType TestType { get; set; }
        /*
         * 接口无法声明类型:委托
         * 接口不能包含字段:静态、动态、常量、字符串、整型、枚举等等
         * 接口中的方法、事件、属性不需要修饰符
         */
        //接口无法声明类型:委托
        //delegate void OnConnectedEventHandler();

        //接口不能包含字段
        //const uint SENSOR_RT = 0x64010101;

        //接口不能包含字段
        //string Name;

        //接口不能包含字段
        //AllTestType _TestType;

        //接口不能包含字段
        //static int TotalCount = 100;
    }

    abstract class AbstractContent
    {
        public abstract int Add(int a, int b);        

        public  event OnExceptionedEventHandler OnExceptioned;
        public abstract Delegate GetDelegate();
        public string Age { get; set; }    
        public AllTestType TestType { get; set; }
        /*
         * 抽象类可以声明类型:委托
         * 抽象类能够包含字段:静态、动态、常量、字符串、整型、枚举等等
         * 抽象类中的方法、事件、属性不需要修饰符
         */
        public delegate void OnConnectedEventHandler();
        public const uint SENSOR_RT = 0x64010101;
        public string Name;
        public AllTestType _TestType;
        public static int TotalCount = 100;
    }
}

 

转载于:https://www.cnblogs.com/jiangyan219/articles/10413932.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值