架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 23228|回复: 0

[资料] c# 抽象类和接口的区别

[复制链接]
发表于 2016-6-21 11:34:25 | 显示全部楼层 |阅读模式
抽象类和接口
    相同点:
    (1) 都可以被继承
    (2) 都不能被实例化
    (3) 都可以包含方法声明
    (4) 派生类必须实现未实现的方法
    区 别:
    (1) 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。
    (2) 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。微软的自定义接口总是后带able字段,证明其是表述一类“我能做。。。”
    (3) 接口可以被多重实现,抽象类只能被单一继承
    (4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中
    (5) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性
    (6) 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法   
    (7) 接口可以用于支持回调,而继承并不具备这个特点
    (8) 抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的
    (9) 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace StudyDemo
  6. {
  7.     public abstract class abstractClass
  8.     {
  9.         ////声明方法
  10.         public abstract void Go();

  11.         public abstract string Sex(string sex);

  12.         public string Name(string str)
  13.         {
  14.             return "您的名字是:" + str;
  15.         }


  16.         public int age;
  17.         public int Age
  18.         {
  19.             get {
  20.                 return age;
  21.             }
  22.             set {
  23.                 age = value;
  24.             }
  25.         }
  26.     }


  27.     public abstract class abstractClass2
  28.     {
  29.         ////声明方法
  30.         public abstract void Go();

  31.         public abstract string Sex(string sex);

  32.         public string Name(string str)
  33.         {
  34.             return "您的名字是:" + str;
  35.         }


  36.         public int age;
  37.         public int Age
  38.         {
  39.             get
  40.             {
  41.                 return age;
  42.             }
  43.             set
  44.             {
  45.                 age = value;
  46.             }
  47.         }
  48.     }
  49.     public interface interfaceClass
  50.     {
  51.         //声明方法
  52.         string Go();

  53.         //接口不能包含字段
  54.         //public int age;
  55.         //public int Age
  56.         //{
  57.         //    get
  58.         //    {
  59.         //        return age;
  60.         //    }
  61.         //    set
  62.         //    {
  63.         //        age = value;
  64.         //    }
  65.         //}
  66.     }

  67.     public interface interfaceClass2
  68.     {
  69.         //声明方法
  70.         string Go();

  71.         //接口不能包含字段
  72.         //public int age;
  73.         //public int Age
  74.         //{
  75.         //    get
  76.         //    {
  77.         //        return age;
  78.         //    }
  79.         //    set
  80.         //    {
  81.         //        age = value;
  82.         //    }
  83.         //}
  84.     }

  85.     public class Test
  86.     {
  87.         //都不能被实例化
  88.         //abstractClass ab = new abstractClass();
  89.         //interfaceClass intr = new interfaceClass();
  90.     }

  91.     public class abstractTest : abstractClass
  92.     {

  93.         public override void Go()
  94.         {
  95.             Console.WriteLine("this is go");
  96.         }

  97.         public override string Sex(string sex)
  98.         {
  99.             return sex;
  100.         }
  101.         
  102.     }

  103.     public class abstractTest1 : abstractClass
  104.     {

  105.         public override void Go()
  106.         {
  107.             Console.WriteLine("this is go");
  108.         }

  109.         public override string Sex(string sex)
  110.         {
  111.             return sex;
  112.         }

  113.     }

  114.     public class interfaceTest : interfaceClass, interfaceClass2
  115.     {

  116.         public string Go()
  117.         {
  118.             throw new NotImplementedException();
  119.         }
  120.     }
  121. }
复制代码






上一篇:System error 5 has occurred. Access is denied.
下一篇:The 'Microsoft.Jet.OleDb.4.0' provider is not registered on the local machine.
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-6-23 19:19

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表