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

相同点

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;
    }
}

 

posted @ 2019-02-21 17:19  <--青青子衿-->  阅读(135)  评论(0编辑  收藏  举报
// /**/ // 在页脚Html代码 引入 // function btn_donateClick() { var DivPopup = document.getElementById('Div_popup'); var DivMasklayer = document.getElementById('div_masklayer'); DivMasklayer.style.display = 'block'; DivPopup.style.display = 'block'; var h = Div_popup.clientHeight; with (Div_popup.style) { marginTop = -h / 2 + 'px'; } } function MasklayerClick() { var masklayer = document.getElementById('div_masklayer'); var divImg = document.getElementById("Div_popup"); masklayer.style.display = "none"; divImg.style.display = "none"; } setTimeout( function () { document.getElementById('div_masklayer').onclick = MasklayerClick; document.getElementById('btn_donate').onclick = btn_donateClick; var a_gzw = document.getElementById("guanzhuwo"); a_gzw.href = "javascript:void(0);"; $("#guanzhuwo").attr("onclick","follow('33513f9f-ba13-e011-ac81-842b2b196315');"); }, 900);