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# Keywords Series 8 interface&virtual&abstract&override&new

本文主要讲述 interface 、 virtual 、 abstract、override、new(修饰符) 的使用方法和区别。   interface   interface 只能包含方法、属...

C#中Abstract,Virtual,Interface

最近一直好懒,真的好懒,琐事也多。学习也慢慢落下了,得慢慢补回来了。       学习一下Abstract,Virtual,Interface这三个关键字。其实在项目开发中,用到的地方着实不多。 ...

c#中的interface abstract virtual override和new

interface用来声明接口 1.只提供方法的规则约束,不提供方法的主体。 例: public interface IPerson { void getName();/...
  • zsw2zkl
  • zsw2zkl
  • 2012年05月11日 15:35
  • 605

C# abstract virtual interface的区别(付static、override用法)

1.Virtua:当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存...

c#中的interface abstract 与 virtual

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

override abstract virtual interface比较

  • 2011年09月10日 16:09
  • 53KB
  • 下载

override 和 new;virtual 、 abstract、interface 的区别

override 和 new 的区别   1.你从基类调用虚函数,就会不同。用override重写,会调用重写后的函数。用new重写,则仍调用基类的函数。 2.new 是“重写”的默认修饰符,若...
  • L0veIT
  • L0veIT
  • 2012年08月06日 02:40
  • 743

接口,抽象类,虚方法,重写(interface,abstract class,virtual function,override)

1.抽象类和虚方法的区别(abstract,virtual function) 看到抽象和虚这两词真的觉得有点抽象,有点犯迷糊.其实这两者还是很容易区分的. 1.abstract可以修饰class...

virtual、abstract、、Interface区别及应用

在看大话设计模式的时候经常会看到abstract,virtual方法,并且这两个方法都可以用override在子类中进行重写,刚一看到时有点搞不清楚,既然这两个方法都可以进行重写,并且都可以在抽象类中...

C#基础知识系列七(base、this、new、override、abstract、virtual、static)

前言 本文主要来讲解一下C#中,自己觉得掌握的不怎么样或者用的不多,不太熟悉的关键字,主要包括base、this、new、override、abstract、virtual以及针对static字...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#中的interface abstract与virtual
举报原因:
原因补充:

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