1. 程式人生 > >c# virtual詳解

c# virtual詳解

在C#中,
如果宣告一個方法的時候用了virtual這個關鍵字,那麼,在派生類中,就可以使用override或者new關鍵字來重寫(棄用)它或是隱藏(忽略)它.
如果你在父類中用了virtual這個關鍵字,而在其派生類中又沒有用override或new關鍵字,而直接引用一個同名方法的話,編譯器將會報警告錯誤,並將以new方式,即忽略派生類中的方法的方式來執行。

廢話少說,還是以程式碼說話:

/// <summary>
/// 抽象類書
/// </summary>
public abstract class Book
{
    /// <summary>
    /// 書名
    /// </summary>

    public string bookName;
    /// <summary>
    /// 虛方法,獲取書名
    /// </summary>
    public virtual string getBookName()
    {
        return "這本書名是:"+bookName;
    }
    /// <summary>
    /// 虛方法,獲取書出版社
    /// </summary>
    public virtual string getBookCome()
    {
        return "cn-web.com出版<br>";

    }
}
/// <summary>
/// 書的派生類
/// </summary>
public class NetBook : Book
{
    /// <summary>
    /// 重寫虛方法override
    /// </summary>
    public override string getBookName()
    {
        return bookName;
    }
    /// <summary>
    /// 不用override,可以不寫new,但會引起警告錯誤,編譯時系統會自動為它加上new關鍵字
    /// </summary>
    public string getBookCome()//正規應當為:public new string getBookCome(),在這裡省略了new關鍵字

    {
        return "www.cn-web.com出版<br>";
    }
}

呼叫:
 public class test
    {
        public test()
        {
            NetBook myNetBook = new NetBook();
        myNetBook.bookName = "asp.net開發案例<br>";
        Response.Write(myNetBook.getBookName());
        Response.Write(myNetBook.getBookCome());


        Book myBook = new NetBook();
        myBook.bookName = "asp.net基礎開發<br>";
        Response.Write(myBook.getBookName());
        Response.Write(myBook.getBookCome());

        }

        public static void Main()
        {
            test t = new test();
        }
    }