1抽象类

    (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法    (2) 抽象类不能被实例化    (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类    (4) 具体派生类必须覆盖基类的抽象方法    (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。如:
using System;

public abstract class A //抽象类A
{
    ;

    public int Num //抽象类包含属性
    {
        get
        {
            return num;
        }
        set
        {
            num = value;
        } 

    }

    public virtual int getNum() //抽象类包含虚方法
    {
        return num;
    }

    public void setNum(int n) // //抽象类包含普通方法
    {
        this.num = n;
    }

    public abstract void E(); //类A中的抽象方法E 

}

public abstract class B : A //由于类B继承了类A中的抽象方法E,所以类B也变成了抽象类
{ 

}

public class C : B
{
    public override void E() //重写从类A继承的抽象方法。如果类B自己还定义了抽象方法,也必须重写
    {
        //throw new Exception("The method or operation is not implemented.");
    }
}

public class Test
{
    static void Main()
    {
        C c = new C();
        c.E();
    }
}
二、接 口

    (1) 接口不能被实例化    (2) 接口只能包含方法声明,不能包含普通方法等    (3) 接口的成员包括方法、属性、索引器、事件    (4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员。如:
public delegate void EventHandler(object sender, Event e);

public interface ITest
{
    //int x = 0;

    int A
    {
        get;
        set;
    }

    void Test();

    event EventHandler Event; 

    int this[int index]
    {
        get;

        set;
    }
}
    (5) 接口中的所有成员默认为public,因此接口中不能有private修饰符(一般在接口中并不会添加修饰符)    (6) 派生类必须实现接口的所有成员    (7) 一个类可以直接实现多个接口,接口之间用逗号隔开    (8) 一个接口可以有多个父接口,实现该接口的类必须实现所有父接口中的所有成员
三、抽象类和接口    相同点:    (1) 都可以被继承    (2) 都不能被实例化    (3) 都可以包含方法声明    (4) 派生类必须实现未实现的方法    区 别:    (1) 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。    (2) 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。微软的自定义接口总是后带able字段,证明其是表述一类“我能做。。。”    (3) 接口可以被多重实现,抽象类只能被单一继承    (4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中    (5) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性    (6) 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法        (7) 接口可以用于支持回调,而继承并不具备这个特点    (8) 抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的     (9) 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法

C#中接口和抽象类的更多相关文章

  1. Java中接口和抽象类的比較

    Java中接口和抽象类的比較-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计 ...

  2. 浅谈Java中接口与抽象类的异同

    浅谈Java中接口与抽象类的异同 抽象类和接口这两个概念困扰了我许久,在我看来,接口与抽象类真的十分相似.期间也曾找过许许多多的资料,参考了各路大神的见解,也只能是简简单单地在语法上懂得两者的区别.硬 ...

  3. android中接口和抽象类的区别

    最近发现很多基础有点生疏了,特地写一点博客来巩固一下.今天主要来谈谈接口和抽象类的区别,我们在项目的很多地方都会用到接口或者抽象类,但是它们之间的一些区别和相同点不知道大家有没有注意到,还有就是,什么 ...

  4. JAVA中接口与抽象类

    抽象类总结 抽象类的概念:是使用关键字abstract修饰的类就是抽象类: 抽象类的产生:当多个不能相互继承的类具有相同的功能时,就需要将共同的信息向上抽取,放到公共的父类中:如果公共的父类只能描述所 ...

  5. 浅谈java中接口与抽象类之间的异同

    刚学习java的时候,总觉得接口和抽象类很像,但又说不上具体有什么区别.今天静下来,翻翻书,查查资料,做个小结.首先举两个例子,看看interface和abstract class 在“外形”上有啥异 ...

  6. java中接口与抽象类的区别

    接口和抽象类的共同特征如下: 接口和抽象类都不能被实例化,位于继承树的顶端,用于被其他类实现和继承. 接口和抽象类都可以包含抽象的方法,实现接口的类或者继承抽象类的类都必须实现这些抽象的方法. 区别: ...

  7. C#中接口与抽象类的区别

    接口与抽象类是面试中经常会考到的点,容易混淆.首先了解下两者的概念: 一.抽象类:      抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类 ...

  8. PHP中接口与抽象类的异同点有哪些

    接口与抽象类的相同点: 1.抽象类和接口都有抽象方法 2.抽象类和接口不能创建实例对象 3.抽象类和接口使用意义相同(定义一种规范) 接口与抽象类的不同点: 1.接口中的方法必须全要是抽象方法(不能用 ...

  9. Java中接口和抽象类的区别?

    抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...

  10. Java中接口与抽象类的异同

    定义(以下是百度百科中的定义): Java接口:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具 ...

随机推荐

  1. HDU 1996

    Problem Description n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列.由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上, ...

  2. 离散傅里叶变换(DFT)

    目录     一.研究的意义     二.DFT的定义    三.DFT与傅里叶变换和Z变换的关系     四.DFT的周期性     五.matlab实验       五.1 程序         ...

  3. 转:11个实用但你可能不知道的Python程序库

    原文来自于:http://www.techug.com/11-python-libraries-you-might-not-know 目前,网上已有成千上万个Python包,但几乎没有人能够全部知道它 ...

  4. 转:PHP超时处理全面总结

    原文来自于:http://wulijun.github.io/2012/08/08/php-timeout-summary.html 概述 在PHP开发工作里非常多使用到超时处理的场合,我说几个场景: ...

  5. 首页重定位到mian.action上

    <body onload="top.location.href='<%=request.getContextPath()%>/main.action';">

  6. COJ 2135 Day10-例1

    Day10-例1 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 给定N个物品,价格分别为A1, A2…AN.设计一套面值互不 ...

  7. Linux kernel ‘ip6_sk_dst_check’函数拒绝服务漏洞

    漏洞名称: Linux kernel ‘ip6_sk_dst_check’函数拒绝服务漏洞 CNNVD编号: CNNVD-201307-070 发布时间: 2013-07-05 更新时间: 2013- ...

  8. Oracle中使用profile管理用户口令

    概述:profile 是口令限制,资源限制的命令集合,当建立数据库的,oracle 会自动建立名称为default 的profile.当建立用户没有指定profile 选项,那么oracle 就会将d ...

  9. 解决android启动程序时,会出现一个短暂的白色空白界面的问题

    在启动的activity定义style为透明就可以了(android:theme="@android:style/Theme.Translucent")

  10. vijosP1603迷宫

    vijosP1603迷宫 链接:https://vijos.org/p/1603 [思路] 参考Matrix67的文章: [代码] #include<cstdio> #include< ...