如题,多谢!

解决方案 »

  1.   

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

  2.   

    原文参见:http://www.7622.com/list/27785.htm虛函數:由virtual聲明,它允許在派生類中被重寫,要重寫方法,必須先聲名為virtual
    public class myclass
    {
     public virtual int myint()
     {
        函數体;
     }
    }
    class myclass1:myclass
    {
     public override int myint()
     {
               函數体1;
     }
    }抽象類、抽象函數:由abstract聲明,在抽象類中可以定義抽象方法,抽象方法基本沒有執行代碼,派生類必須重寫它,提供其執行代碼
    public abstract class myclass
    {
     public abstract int myint();
    }
    public class myclass1:myclass
    {
     public override int myint()
     {
         函數体;
     }
    }接口類:由interface聲明,是特殊的抽象類,是方法、屬性、事件和索引符的組合,沒有字段,其成員無執行方式,無構造函數,不允許進行運算符重載,接口和它的成員沒有任何訪問修飾符,它總是公共的,不能聲明為虛擬或靜態,繼承自接口的派生類必須實現接口中的所有方法
    interface Imyinterface
    {
     void myfunction();
     string name
     {
       get;
       set;
     }
    }
    class myclass:Imyinterface
    {
     void myfunction()
     {
        函數体;
     }
     string name
     {
        get
        {
           return name;
        }
        set
        {
           name=value;
        }
     }
    }
      

  3.   

    简单来讲只要是允许子类改写的函数都写成VIRTUAL就是了
      

  4.   

    他山居士 过来看看吧,谢谢,按你的说法,virtual就是用来实现多态的1。在接口中定义的方法是不是默认都为虚方法,虽然都不写virtual2。在抽象基类中,如果有一个virtual方法,那么也是为了多态,如果有一个实现方法而没标识virtual,那这个方法就应该是一个简单的实现方法,而不能实现多态。
      

  5.   

    你要弄明白接口,抽象类..并不能和虚方法一起理解...虚方法简单的说,就是为了让他的继承类重载,或者被他的继承类隐藏..另外补充一点,抽象类,你可以理解为抽象类也是一个类,但是不能被实例化的类..抽象类也可以实现他成员内的执行代码..关于接口的概念,你可以看看这个文章.http://lixianhuei.cnblogs.com/archive/2005/08/04/207123.html
      

  6.   

    To 不思不归,不孟不E,原来是头大灰狼“虚方法简单的说,就是为了让他的继承类重载”
    既然这样,那为什么要用虚方法呢,就正常定义一个方法,在继承类中用new隐藏不一样的吗