interface用来声明接口
1.只提供一些方法规约,不提供方法主体
  如
  public interface IPerson
 {
  void getName();//不包含方法主体
  }
2.方法不能用public abstract等修饰,无字段变量,无构造函数。
3.方法可包含参数
  如 
  public interface IPerson
  {
   void getAge(string s);
  }

一个例子(例1):
  public interface IPerson
  {
   IPerson();              //错误
   string name;            //错误
   public void getIDcard();//错误

void getName();         //right
   void getAge(string s);  //right
   }

实现interface的类
1.与继承类的格式一致,如 public class Chinese:IPerson{}
2.必须实现interface中的各个方法

例2,继承例1
    public class Chinese:IPerson
  {
   public Chinese(){}             //添加构造
   public void getName(){}        //实现getName()
   public void getAge(string s){} //实现getAge()
   }

abstract声明抽象类、抽象方法
1.抽象方法所在类必须为抽象类
2.抽象类不能直接实例化,必须由其派生类实现。
3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似


  public abstract class Book
 {
  public Book()
  {   
     }

public abstract void getPrice();      //抽象方法,不含主体
        public virtual void getName()   //虚方法,可覆盖
        {
      Console.WriteLine("this is a test:virtual getName()");
             }
        public virtual void getContent()   //虚方法,可覆盖
        {
      Console.WriteLine("this is a test:virtual getContent()");
             }
 public void getDate()                           //一般方法,若在派生类中重写,须使用new关键字
        {
      Console.WriteLine("this is a test: void getDate()");
             }
  }

public class JavaBook:Book
  {
      public override void getPrice()   //实现抽象方法,必须实现
      {
  Console.WriteLine("this is a test:JavaBook override abstract getPrice()");
  }
      public override void getName()   //覆盖原方法,不是必须的
      {
  Console.WriteLine("this is a test:JavaBook override virtual getName()");
  }
  }

测试如下:
 public class test
  {
   public test()
   {
    JavaBook jbook=new JavaBook();
    jbook.getPrice();      //将调用JavaBook中getPrice()
    jbook.getName();       //将调用JavaBook中getName()
    jbook.getContent();    //将调用Book中getContent()
    jbook.getDate();       //将调用Book中getDate()
    
   }
   public static void Main()
   {test t=new test();
   }
  }

virtual标记方法为虚方法
1.可在派生类中以override覆盖此方法
2.不覆盖也可由对象调用
3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法

abstract与virtual: 方法重写时都使用 override 关键字
interface中的方法和abstract方法都要求实现

转载于:https://www.cnblogs.com/delikesi/archive/2009/01/21/1379268.html

interface abstract与virtual相关推荐

  1. c#中的interface abstract 与 virtual(转)

    interface用来声明接口 1.只提供一些方法规约,不提供方法主体.  如: public interface IPerson {     void getName();//不包含方法主体 } 2 ...

  2. c#中的interface abstract与virtual的介绍与使用

    abstract 与virtual : 方法重写时都使用 override 关键字,interface中的方法和abstract方法都要求实现. 1:interface用来声明接口 1.1.只提供一些 ...

  3. c#中的interface abstract与virtual

    abstract 与virtual : 方法重写时都使用 override 关键字,interface中的方法和abstract方法都要求实现 interface用来声明接口 1.只提供一些方法规约, ...

  4. c#中abstract与virtual的区别

    1.abstract方法只能在抽象类中声明,虚方法则不是.    abstract方法必须在派生类中重写,而virtual则不必 2.abstract方法不能声明方法实体,       abstrac ...

  5. c#中的interface abstract virtual override和new

    from:(http://hi.baidu.com/21tian/blog/item/aabfae6ed4a675de81cb4ab4.html) interface用来声明接口 1.只提供方法的规则 ...

  6. (转)C#中的Abstract和Virtual函数区分,因我老弄不明白这个问题,所以转到这儿

    发现很多朋友对于C#中的Abstract和Virtual函数区分得不是很清楚,下面我通过两段代码让大家看看这两者之间到底有什么区别~~ 开发环境: VS.net 2005 使用方法: 用以下代码覆盖p ...

  7. C#中Abstract和Virtual使用详解

    转载自: https://www.cnblogs.com/vaevvaev/p/6911788.html 在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区 ...

  8. (转)C#中Abstract和Virtual

    转:http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html 在C#的学习中,容易混淆virtual方法和abstract方法的使用, ...

  9. C#中Abstract和Virtual(转载)

    在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别.二者都牵涉到在派生类中与override的配合使用. 一.Virtual方法(虚方法) virtual ...

最新文章

  1. PHP“Cannot use object of type stdClass as array”
  2. X@X.X域名转向的实现
  3. Database Connection String
  4. 转载:【opencv入门教程之三】:组件结构
  5. building a blog
  6. 天天学到夜里12点,感觉越学越迷茫,怎么办?
  7. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_3_字符输出流_Writer类FileWriter类...
  8. 社交网络影响力最大化
  9. android调用webservice,Android开发调用WebService的方法示例
  10. 花音机器人_氧叔在“难红难在哪儿”系列中分析曾黎时提到:
  11. 易到实际控制人温晓东成老赖:与贾跃亭曾是盟友 如今反目
  12. Kmeans 算法 收敛
  13. r730xd外置光驱安装linux,PowerEdge r730xd 安装centos 6.7
  14. suse linux 11 xdm图形化,suse xdm 设置
  15. mysql 表聚合_Mysql分表之后的聚合统计
  16. Python中基本输入和输出
  17. Ubuntu20.04裸机上配置单机 Pulsar2.7.0 成功并生产消费消息
  18. 不眠者-泽队:广东省工科赛—全地形越障排爆组(开源7天)
  19. 数据结构——树(习题篇)
  20. #define宏的边际效应

热门文章

  1. 洛谷 P3102 [USACO14FEB]秘密代码Secret Code
  2. 【BZOJ1003】物流运输
  3. C# WebApi POST 提交
  4. 【开源】.net 分布式架构之监控平台
  5. 软件工程个人作业01;
  6. android146 360 病毒查杀
  7. Vertex and Fragment Shader
  8. 在 Swift 语言中更好的处理 JSON 数据:SwiftyJSON
  9. Win32下 Qt与Lua交互使用(二):在Lua脚本中使用Qt类
  10. 360发布穿戴设备“儿童卫士”手环