c# virtual詳解
阿新 • • 發佈:2019-01-23
在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();
}
}
如果宣告一個方法的時候用了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();
}
}