源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c#中的interface abstract与virtual介绍

  • 时间:2021-06-11 08:44 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c#中的interface abstract与virtual介绍
interface用来声明接口 1.只提供一些方法规约,不提供方法主体.  如:
[u]复制代码[/u] 代码如下:
public interface IPerson {     void getName();//不包含方法主体 }
2.方法不能用public abstract等修饰,无字段变量,无构造函数。 3.方法可包含参数。  如
[u]复制代码[/u] 代码如下:
  public interface IPerson   {     void getAge(string s);   }
  一个例子(例1):
[u]复制代码[/u] 代码如下:
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
[u]复制代码[/u] 代码如下:
public class Chinese:IPerson {    public Chinese(){}                  //添加构造    public void getName(){}          //实现getName()    public void getAge(string s){} //实现getAge() }
abstract声明抽象类、抽象方法 1.抽象方法所在类必须为抽象类 2.抽象类不能直接实例化,必须由其派生类实现。 3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟abstract中的方法类似   如
[u]复制代码[/u] 代码如下:
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()");       } }
 测试如下:
[u]复制代码[/u] 代码如下:
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函数区分得不是很清楚,下面我通过两段代码让大家看看这两者之间到底有什么区别~~ 开发环境: VS.net 2005 使用方法: 用以下代码覆盖program.cs中的代码,然后run即可 第一段代码: Abstract的用法
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication3 {     public abstract class Book     {         //抽象方法,不含主体,抽象方法所在类必须为抽象类,派生类必须实现该方法         public abstract void Introduce();     }     public interface iBook     {     }     public class JavaBook : Book     {         //实现抽象方法,必须实现,必须添加override关键字         public override void Introduce()         {             Console.WriteLine("I'm Java");         } //            // Compile Error //            public void Introduce() //            { //                Console.WriteLine("I'm Java"); //            }     }     public class test     {         public test()         {             JavaBook javaBook = new JavaBook();             javaBook.Introduce();      //将调用JavaBook中Introduce()             Book book = new JavaBook();             book.Introduce();      //将调用JavaBook中Introduce()         }         public static void Main()         {             test t = new test();         }     } }
第二段代码: Virtual的用法以及override的用法
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication2 {     public abstract class Book     {         public virtual void Introduce()         {             Console.WriteLine("I'm book");         }         public virtual void SayHi()         {             Console.WriteLine("Hi, I'm book");         }     }     public class JavaBook : Book     {         public override void Introduce()         {             Console.WriteLine("I'm Java");         }         //注意,此方法没有override父类的方法         public void SayHi()         {             Console.WriteLine("Hi, I'm Java");         }     }     public class test     {         public test()         {             JavaBook javaBook = new JavaBook();             Book book = new JavaBook();             javaBook.Introduce();       //将调用JavaBook中Introduce()             book.Introduce();       //将调用JavaBook中Introduce()             javaBook.SayHi();      //将调用JavaBook中SayHi()             book.SayHi();           //将调用Book中SayHi()         }         public static void Main()         {             test t = new test();         }     } }
第三段代码: new的用法
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication4 {     public abstract class Book     {         public void Introduce()         {             Console.WriteLine("I'm book");         }         public void SayHi()         {             Console.WriteLine("Hi, I'm book");         }     }     public class JavaBook : Book     {         // 没有加new,但C#默认行为会加上new         public void Introduce()         {             Console.WriteLine("I'm Java");         }         // 显式加上new,跟不加new实际效果一样,只是加new之后会消除compile warning         public new void SayHi()         {             Console.WriteLine("Hi, I'm Java");         }     }     public class test     {         public test()         {             JavaBook javaBook = new JavaBook();             Book book = new JavaBook();             javaBook.Introduce();       //将调用JavaBook中Introduce()             javaBook.SayHi();           //将调用JavaBook中SayHi()             book.Introduce();       //将调用Book中Introduce()             book.SayHi();           //将调用Book中SayHi()         }         public static void Main()         {             test t = new test();         }     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部