c#之虚方法与隐藏方法的区别
2017-03-28 本文已影响0人
困卡
虚方法与隐藏方法定义
重写(虚方法):继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的 例如:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.
隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。
重写(virtaul)时,定义的变量为父类或子类, 赋值为子类时. 皆调用子类的重写方法;(会从子类中查找有重写则调用, 没有则调用基类方法)
隐藏(new)时,定义的变量为父类则调用父类的方法(不管赋值是子类还是父类),定义的变量为子类则调用子类的方法。(使用场景: 当子类想取的一方法名称与父类相同时, 可以使用. 子类的方法与父类的方法相对来说是没有直接的关系(继承,重写==). )
重写virtual(虚方法)示例 : (看方法后面的实例)
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
}
class B: A
{
public override void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main()
{
B b = new B();
b.F();
A a = b;
a.F();
}
}
输出为 : B.F B.F
隐藏(new)示例:(看方法前面的声明)
class A
{
public void F()
{
Console.WriteLine("A.F");
}
}
class B: A
{
new public void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main(string[] args)
{
B b = new B();
b.F();
A a = b;
a.F();
}
}
输出为 : B.F A.F