c#中virtual与override举例讲解补充(new)
看过上两篇文章,有朋友问如果基类中的方法不是virtual的话,派生类可不可以用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 string getBookName()
{
return "这本书名是:"+bookName;
}
/// 获取书名
/// </summary>
public string getBookName()
{
return "这本书名是:"+bookName;
}
/// <summary>
///获取书出版社
/// </summary>
public string getBookCome()
{
return "cn-web.com出版<br>";
}
}
///获取书出版社
/// </summary>
public string getBookCome()
{
return "cn-web.com出版<br>";
}
}
/// <summary>
/// 书的派生类
/// </summary>
public class NetBook : Book
{
/// <summary>
/// 隐藏基类中的同名方法,new可省略
/// </summary>
public new string getBookName()
{
return bookName;
}
/// 书的派生类
/// </summary>
public class NetBook : Book
{
/// <summary>
/// 隐藏基类中的同名方法,new可省略
/// </summary>
public new string getBookName()
{
return bookName;
}
/// <summary>
/// 隐藏基类中的同名方法,new可省略
/// </summary>
public new string getBookCome()
{
return "www.cn-web.com出版<br>";
}
}
/// 隐藏基类中的同名方法,new可省略
/// </summary>
public new string getBookCome()
{
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号