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() 是为了显式隐藏基类中的方法)
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() 是为了显式隐藏基类中的方法)
相关文章推荐
- C++中Override的两个例子
- 用两个小例子来解释单例模式中的“双重锁定”
- 一个虚函数隐藏和重写的例子(new和override)
- 两个例子均用现实的例子来解释委托事件的处理过程
- Spring概念的解释和两个简单例子
- 两个解释动态规划问题非常直观形象的例子
- (十三)sealed、new、virtual、abstract 和 override
- caffe学习笔记9:运行caffe自带的两个例子
- knowing abstract,virtual,override,new
- override与new的区别
- C#学习笔记系列之一:new和override的区别
- C#中重写(override)和覆盖(new)的区别
- 信号量基础和两个经典例子
- Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
- 小例子一步一步解释“函数调用过程中栈的变化过程
- Android Intent.FLAG_NEW_TASK详解,包括其他的标记的一些解释
- 谈谈C#中的三个关键词new , virtual , override
- 【转载】《Flexpaper二次开发入门教程》(十一) Flexpaper例子解释(4.2节) ... ...
- 两个简单的例子,带你了解Java中继承和组合的区别
- 小例子一步一步解释“函数调用过程中栈的变化过程”