c#中的interface abstract与virtual

原创 2005年05月13日 18:26:00

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方法都要求实现
 

简单易懂的解释c#的abstract和virtual的用法和区别

先来看abstract方法,顾名思义,abstract方法就是抽象方法。 1、抽象方法就是没有实现的,必须是形如: public abstract void Init(); 2、拥有抽象方法的类...
  • wzj0808
  • wzj0808
  • 2016年05月12日 22:04
  • 3665

深入理解virtual,abstract class,interface

C++虚函数与JAVA中抽象函数比较,接口与抽象类,纯虚函数和虚函数的区别在于前者不包含定义,而后者包含函数体;abstract class和interface在Java语言中都是用来进行抽象类,语法...
  • nxh_love
  • nxh_love
  • 2013年12月13日 14:45
  • 7217

C# interface与abstract class区别

C# interface与abstract class区别 一、abstract class abstract 声明抽象类抽象方法,一个类中有抽象方法,那么这个类就是抽象类了。所谓的抽象方法,就是不含...
  • fengzhongzhishenfu
  • fengzhongzhishenfu
  • 2014年04月09日 18:19
  • 3796

C#中的virtual和abstract

virtual是实现C++多态的关键性条件:C++使用关键字virtual来修饰类中的方法,被修饰的方法可以在子类中重写,如此便覆盖基类方法,以实现相同的行为却不同的功能;多继承情况下的基类析构函数通...
  • iFuMI
  • iFuMI
  • 2016年07月16日 14:43
  • 786

Interface与abstract类的区别

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。       抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。...
  • u011860731
  • u011860731
  • 2015年09月25日 11:43
  • 2323

abstract class 和 interface 区别

相信这个问题一定困扰不少小伙伴,今天来谈谈自己的理解 首先从概念上来区分 abstract class :就是抽象类,用关键字abstract来修饰的类称为抽象类(abstract...
  • singit
  • singit
  • 2015年08月17日 13:33
  • 1513

java 中 abstract 与interface的区别

Abstract class                                                   Interface 实例化          不能     ...
  • longtengshuimeng
  • longtengshuimeng
  • 2016年06月09日 14:07
  • 599

Java中abstract class和interface的区别

在Java语言中,abstract和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。abstract class和interface之间在对...
  • shuaijunlan
  • shuaijunlan
  • 2016年05月11日 20:32
  • 3187

interface和abstract 的区别和相同点

在Java语言中,abstract class和interface是支持抽象类定义的两种机制。 不能创建abstract类的实例,然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实...
  • Mandypan
  • Mandypan
  • 2016年08月06日 19:30
  • 6129

抽象类abstract和接口interface的区别与深入思考

在以前的编程过程中,经常对abstract和interface混淆,相信很多初学者都有这样的困惑,也问过很多经验丰富的程序员,他们也不能清楚地说出个所以然来。经过自己的思考,想到了一种比较形象的方式来...
  • wujiaxian
  • wujiaxian
  • 2014年10月11日 11:32
  • 2895
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#中的interface abstract与virtual
举报原因:
原因补充:

(最多只允许输入30个字)