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

解决方案 »

  1.   

    override可以覆盖基类的方法,让基类的方法以子类的内容实现,而new不用来覆盖基类的方法,而是全新定义一个子类的方法,这个方法只属于子类,与基类的方法无关,只是名字上相同而已
      

  2.   

    除了不会让编译器产生警告,还有没有其他用途。当然有用途,因为用对了才不会产生警告.....:)你的例子是错的,没有返回值然后告诉你,用了new就表示B xxx=new B();xxx.fun1()就会调用B的fun1而不是
    A的fun1,明白了么?
      

  3.   

    override可以覆盖基类的方法,让基类的方法以子类的内容实现,而new不用来覆盖基类的方法,而是全新定义一个子类的方法,这个方法只属于子类,与基类的方法无关,只是名字上相同而已
      

  4.   

    在用作修饰符时,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
      

  5.   

    用new是隐藏了父类的方法,new可以省略~~~~比如照上面的定义:
    A b=new B();
    B.fun1();//实际上是调用了父的方法
    ((A)B).fun1();//调用子类的方法而使用override覆盖的话,以上2行都是调用子类的方法
      

  6.   

    to :xiaotupansy(中)
    Thanks!
    你说得没有错,
    B xxx=new B();xxx.fun1()就会调用B的fun1而不是A的fun1
    但是即使没有使用new标识符,也是调用了B得fun1
    例如:
    class A {
        public void fun1() 
        {
            System.Console.WriteLine("class A:fun1");
        
        }}class B :A
    {
         public void fun1() {        System.Console.WriteLine("class B:fun1");
        }
    }
    class test {
        public static void Main() 
        {
            B b = new B();
            b.fun1();
          
        }
    }无论class B得fun1是否使用了new修饰符,最后都是输出
    class B:fun1
      

  7.   

    我的意思是是否添加new标识符在实际应用中的结果除了编译器是否会有警告,没有其他的差异。
      

  8.   

    试验了一下,你说的没错
    估计你可以参考一下xyh2002(凌) 的说法
      

  9.   

    用new是隐藏了父类的方法,new可以省略~~~~比如照上面的定义:
    A b=new B();
    B.fun1();//实际上是调用了父的方法
    ((A)B).fun1();//调用子类的方法而使用override覆盖的话,以上2行都是调用子类的方法----------------------
    不好意思,小写的b写成大写了~~~
    A b=new B();
    b.fun1();
    ((A)b).fun1();