日期:2014-05-20  浏览次数:20874 次

关于new修饰符的问题
初学c#,大家多指教。
在派生类的方法中指定new修饰符,除了不会让编译器产生警告,还有没有其他用途。
例如
class   A
{
      public   fun1()
    {
        ....
      }
}
class   B:A
{
      new   public   fun1()
    {
        ....
      }
}

------解决方案--------------------
override可以覆盖基类的方法,让基类的方法以子类的内容实现,而new不用来覆盖基类的方法,而是全新定义一个子类的方法,这个方法只属于子类,与基类的方法无关,只是名字上相同而已
------解决方案--------------------
override可以覆盖基类的方法,让基类的方法以子类的内容实现,而new不用来覆盖基类的方法,而是全新定义一个子类的方法,这个方法只属于子类,与基类的方法无关,只是名字上相同而已
------解决方案--------------------
在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。在不使用 new 修饰符的情况下隐藏成员是允许的,但会生成警告。使用 new 显式隐藏成员会取消此警告,并记录代之以派生版本这一事实。

若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并使用 new 修饰符修饰该成员。例如:


public class BaseC
{
public int x;
public void Invoke() {}
}
public class DerivedC : BaseC
{
new public void Invoke() {}
}
在此示例中,DerivedC.Invoke 隐藏了 BaseC.Invoke。字段 x 不受影响,因为它没有被类似名称的字段隐藏。


详细的看msdn,http://msdn2.microsoft.com/zh-cn/library/435f1dw2(VS.80).aspx
------解决方案--------------------
用new是隐藏了父类的方法,new可以省略~~~~

比如照上面的定义:
A b=new B();
B.fun1();//实际上是调用了父的方法
((A)B).fun1();//调用子类的方法

而使用override覆盖的话,以上2行都是调用子类的方法