new与override的区别 求解答下面代码
using system;
public class A
{
public string o;
public A(string i)
{
o=i;
}
}
public class B
{
static void Main()
A a=new A("wangshijin")
ConSole.Writeline(a)
}
这段代码的运行结果是:A原因是基类中的ToString()方法中的定义。
现在我想覆盖掉祖先类object的ToString()方法
new public string ToString()
{
return o;
}
或者
public override string ToString()
{
return o;
}
但是运行结果不一样 求解答。new方法结果依旧不变。
[解决办法]
ConSole.Writeline(a.ToString())
[解决办法]
http://so.csdn.net/search?t=thread&q=new%20override
csdn里就有很多
估计google和baidu会有更多
[解决办法]
new关键字只是起隐藏的作用,而override才是真正的重写。
比如一个类A有方法SomeFunction(标志为override),类B继承类A,也拥有一个同名方法SomeFunction,由于子类B拥有和父类同名方法,所以就必须对该方法进行说明,说明方式可以是new和override,两种方式的区别在于调用该方法时对象的身份,具体如下,我先假设类A中的SomeFunction输出A' SomeFunction , 类B中的SomeFunction输出B’ SomeFunction。
class A{ public override void SomeFunction() { Console.WriteLine("A' SomeFunction"); }}class B{ public override void SomeFunction() { Console.WriteLine("B' SomeFunction"); }}class Program{ B objB = new B(); objB.SomeFunction(); //对象的身份为B,输出结果就按B类中的结果输出 ((A)objB).SomeFunction(); //对象的身份为A,输出结果仍然按B类中的结果输出。原因就是子类重写override了父类的方法,一旦子类对象创建完毕,无论是将其看成B类对象还是A类对象,方法执行都将按照子类中实现的方式进行}------------------------------------------------class A{ public override void SomeFunction() { Console.WriteLine("A' SomeFunction"); }}class B{ public new void SomeFunction()//隐藏 { Console.WriteLine("B' SomeFunction"); }}class Program{ B objB = new B(); objB.SomeFunction(); //对象的身份为B,输出结果就按B类中的结果输出 ((A)objB).SomeFunction(); //对象的身份为A,输出结果按A类中的结果输出。原因就是子类仅仅只是隐藏了父类的方法,一旦子类对象被其看成A类对象,方法执行都将按照A类中实现的方式进行}