using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication2
{
    public class One
    {
        public void OneFunction()
        {
            Console.WriteLine(1);
        }
    }
    public class Tow:One 
    {
        public static void Main() 
        {
            Tow t = new Tow();
            t.OneFunction();
            One o = new Tow();
            o.OneFunction();
        }
        public new void OneFunction()//这里的new有什么用?不用new程序也能照样运行~~无非是IDE会提示你在方法                                   //前面加上new
        {
            Console.WriteLine(2);
        }
    }}

解决方案 »

  1.   

    不用new 应该会有警告的, 
    这个是子类 重写父类的非虚拟方法。就是说完全另一种实现各式。
    最好显示的用new.
      

  2.   

    override重写方法,
    new隐藏基类的方法,那么基类的方法和当前类的方法同时存在只是被隐藏了;你查一下两者的区别就明白了.
      

  3.   

    不写new的话.其实也是隐藏方法.最好把new加上.这是个好的习惯.
    不写的话默认就是new
      

  4.   

    不用new运行是可以运行,但是会有提示:隐藏了继承的成员,如果是有意隐藏,请使用关键字 new之类的警告吧
    本来你父类已经有同名的方法了,你子类就应该用new覆盖的
      

  5.   


    new隐藏基类的方法。
    但是类Tow中的方法用了new,如下
            public new void OneFunction()
            {
                Console.WriteLine(2);
            }执行
    One o = new Tow();
    o.OneFunction();
    的结果却是执行的基类的OneFunction(),并没起到“隐藏基类的方法”的作用啊!
      

  6.   


    什么叫隐藏?没有隐藏的话你还能出来基类的OneFunction()方法?
    隐藏的意思是基类的方法和你子类的方法同时存在即new修饰的方法和基类的方法共存
    override修饰的方法重写了基类的方法,不共存