如果你用override,则无论调用的是A类还是B类中的TEST(),系统都会找到它实质类的TEST(); 如果是用的New,则可以通过类型转换调用到基类的TEST();下面是override的情况: A a = new A(); B b = new B(); A a1=new B(); a.Test();//调用A中Test(); b.Test();//调用B中Test(); a1.Test();//调用B中Test();系统会自动识别a1是B的实例 ((A)b).Test();//与上面相同下面是new的情况: A a = new A(); B b = new B(); A a1=new B(); a.Test();//调用A中Test(); b.Test();//调用B中Test(); a1.Test();//调用A中Test(); ((A)b).Test();//与上面相同
NEW是指在子类中告知编译器要显示的隐藏基类的相同方法,Override则是重写基类的方法,差别很大。 如: public class BaseClass { puclic virtual void DoSomething() { Console.Write("BaseClass Function..."); } }//重写基类方法 public class DerivedClass { puclic override void DoSomething() { Console.Write("DerivedClass Function..."); } }//显示隐藏基类方法 public class DerivedClass { new puclic void DoSomething() { Console.Write("DerivedClass Function..."); } }同样两种写法,运行以下代码的结果明显不一样: DerivedClass MyDerivedObj = new DerivedClass(); BaseClass MyBaseObj = new BaseClass(); MyBaseObj = MyDerivedObj; MyBaseObj.DoSomething();重写(override)的话结果是:DerivedClass Function...; 隐藏(new)的话结果是:BaseClass Function...;希望此示例对你有所帮助 ^_^
new父类的一般方法
new父类的一般方法
=====
豁然开朗的感觉
如果是用的New,则可以通过类型转换调用到基类的TEST();下面是override的情况:
A a = new A();
B b = new B();
A a1=new B();
a.Test();//调用A中Test();
b.Test();//调用B中Test();
a1.Test();//调用B中Test();系统会自动识别a1是B的实例
((A)b).Test();//与上面相同下面是new的情况:
A a = new A();
B b = new B();
A a1=new B();
a.Test();//调用A中Test();
b.Test();//调用B中Test();
a1.Test();//调用A中Test();
((A)b).Test();//与上面相同
如:
public class BaseClass
{
puclic virtual void DoSomething()
{
Console.Write("BaseClass Function...");
}
}//重写基类方法
public class DerivedClass
{
puclic override void DoSomething()
{
Console.Write("DerivedClass Function...");
}
}//显示隐藏基类方法
public class DerivedClass
{
new puclic void DoSomething()
{
Console.Write("DerivedClass Function...");
}
}同样两种写法,运行以下代码的结果明显不一样:
DerivedClass MyDerivedObj = new DerivedClass();
BaseClass MyBaseObj = new BaseClass();
MyBaseObj = MyDerivedObj;
MyBaseObj.DoSomething();重写(override)的话结果是:DerivedClass Function...;
隐藏(new)的话结果是:BaseClass Function...;希望此示例对你有所帮助 ^_^