首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

new与override的区别 求解答下面代码解决方案

2012-03-25 
new与override的区别 求解答下面代码using systempublic class A{public string opublic A(string i){o

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。

C# code
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类中实现的方式进行} 

热点排行