使用下面的代码可以隐藏
public class BaseClass
{
public void Show()
{
Console.WriteLine("BaseClass!");
}
}
public class DerivedClass:BaseClass
{
public void Show()
{
Console.WriteLine("DerivedClass!");
}
}
尽管可以运行,不过会出一个警告:你试图隐藏一个基类成员,如果是无意隐藏,可以修改。如果确实要隐藏可以使用new显示表明意图
public class BaseClass
{
public void Show()
{
Console.WriteLine("BaseClass!");
}
}
public class DerivedClass:BaseClass
{
new public void Show()
{
Console.WriteLine("DerivedClass!");
}
}
加上new以后,警告消失
下面来看如何重写
public class BaseClass
{
public virtual void Show()
{
Console.WriteLine("BaseClass!");
}
}
public class DerivedClass:BaseClass
{
public override void Show()
{
Console.WriteLine("DerivedClass!");
}
}
再来看看这两种方式的区别
//重写
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
public class BaseClass
{
public virtual void Show()
{
Console.WriteLine("BaseClass!");
}
}
public class DerivedClass:BaseClass
{
public override void Show()
{
Console.WriteLine("DerivedClass!");
}
}
class Program
{
static void Main(string[] args)
{
BaseClass baseclass = new BaseClass();
DerivedClass derivedclass = new DerivedClass();
baseclass.Show();//BaseClass!
derivedclass.Show();//DerivedClass!
baseclass = derivedclass;
baseclass.Show();//DerivedClass!
}
}
}
//隐藏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
public class BaseClass
{
public virtual void Show()
{
Console.WriteLine("BaseClass!");
}
}
public class DerivedClass:BaseClass
{
new public void Show()
{
Console.WriteLine("DerivedClass!");
}
}
class Program
{
static void Main(string[] args)
{
BaseClass baseclass = new BaseClass();
DerivedClass derivedclass = new DerivedClass();
baseclass.Show();//BaseClass!
derivedclass.Show();//DerivedClass!
baseclass = derivedclass;
baseclass.Show();//BaseClass!
}
}
}