偶是菜鸟,问个非常sb的问题
c#里面重写超类方法的new和overriding有什么区别阿?
------解决方案--------------------这两个修饰符在含义上相互排斥,new 会用同样的名称创建一个新成员并使原始成员变为隐藏的,而 override 则扩展继承成员的实现。
------解决方案--------------------override父类的抽象方法或虚方法
new父类的一般方法
------解决方案--------------------如果你用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...;
希望此示例对你有所帮助 ^_^
------解决方案--------------------1.遮蔽 為子類的方法,不能實現多態;
2.重寫 重寫父類方法,可以實現多態;