c#中virtual与override举例讲解
在C#中,如果声明一个方法的时候用了virtual这个关键字,那么,在派生类中,就可以使用override或者new关键字来重写(弃用)它或是隐藏(忽略)它.如果你在父类中用了virtual这个关键字,而在其派生类中又没有用override或new关键字,而直接引用一个同名方法的话,编译器将会报警告错误,并将以new方式,即忽略派生类中的方法的方式来运行。
废话少说,还是以代码说话:
/// <summary>
/// 抽象类书
/// </summary>
public abstract class Book
{
/// <summary>
/// 书名
/// </summary>
public string bookName;
/// 抽象类书
/// </summary>
public abstract class Book
{
/// <summary>
/// 书名
/// </summary>
public string bookName;
/// <summary>
/// 虚方法,获取书名
/// </summary>
public virtual string getBookName()
{
return "这本书名是:"+bookName;
}
/// 虚方法,获取书名
/// </summary>
public virtual string getBookName()
{
return "这本书名是:"+bookName;
}
/// <summary>
/// 虚方法,获取书出版社
/// </summary>
public virtual string getBookCome()
{
return "cn-web.com出版<br>";
}
}
/// 虚方法,获取书出版社
/// </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>
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>";
}
}
/// 不用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());
{
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();
}
}
浙公网安备 33010602011771号