您的位置:首页 > 其它

override与new(用两个小例子来解释)

2011-11-10 09:58 176 查看
例一:

class Program

{

static void Main(string[] args)

{

B5 b5 = new B5();

b5.MethodB();

}

}

public class A5

{

public virtual void MethodA()

{

Console.WriteLine("A5.MethodA");

Console.Read();

}

public virtual void MethodB()

{

Console.WriteLine(this.GetType().ToString());

MethodA(); //父类引用指向子类对象

}

}

public class B5 : A5

{

public new void MethodA()//将这里的new改为override将又是另一种情况

{

Console.WriteLine("B5.MethodA");

Console.ReadLine();

}

}

例二:

class A

{

public A()

{

AA();

}

public virtual void AA()

{

Console.WriteLine("This is AA");

}

}

class B : A

{

int x = 1;

int y;

public B()

{

y = -1;

AA();

}

public override void AA() //将这里的override修改为new结果将是另一种情况

{

Console.WriteLine("x={0},y={1}", x, y);

}

}

class programs

{

static void Main(string[] args)

{

B b = new B();

Console.ReadKey();

}

}

//注释:以上两个例子表明,当存在“父类引用指向子类对象”的情况时,不能明确明白执行的是子类方法,还是父类方法时,可以如下理解

//当父类方法为virtual A(),子类方法为override A()时,此时将执行子类方法,因为此时父类的方法被子类重写了;当子类方法被改为new A()时,此时将执行父类的方法

//(注意:这里指的是当存在父类的引用指向子类对象的情况,如果本身就是子类对象执行方法的话,站在子类的角度看,new A() 是为了显式隐藏基类中的方法)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: