在网上看到了对方法重载和重写的定义:
方法重写:子类继承父类,并在子类中定义一个与父类中的方法名称和参数都相同的方法,就会覆盖父类中的方法,这就是方法重写,并且“重写”只有在类继承的时候才会发生。
方法重载:同一个类中有两个或两个以上的方法,方法名相同,参数列表不同,就构成方法重载。同时有继承关系的类,子类也可以重载父类的方法。这里他说有继承关系的类,子类也可以[color=#993300]重载父类的方法[/color]。
我想基类中的方法如果定义了virtual,子类再override就成了方法重写了,我现在不讨论这种情况。在没有virtual的情况下,在子类中不能这样重载吗:
   class OverLoadTest    
   {
        static void Main(string[] args)
        {
            BaseClass son = new SonClass();
            //在这里我想调用子类中的方法,可是程序不让我执行
            Console.WriteLine(son.getName("5",9,10));
        
        }
    }    public class BaseClass 
    {
       //这里是基类的方法
        public string getName(string s,int i) 
        { 
            string name="我是基类的NAME!";
            return name;
        }
    }    public class SonClass:BaseClass
    {
        //这里是派生类的方法,与基类的方法相比,只是参数列表不同
        public string getName(string s,int i,int j)
        {
            string name = "我是派生类的NAME!";
            return name;
        }
    }

解决方案 »

  1.   

    这样写
    Console.WriteLine(((SonClass)son).getName("5", 9, 10));因为你没写virturl,所以这个方法调用是和类型相关的,不是和对象相关的。
      

  2.   

    当然不能执行了父类根本没有那个方法 son的Type是BaseClass,方法列表中无GetName
      

  3.   

      public new string getName(string s,int i,int j)
      {
      

  4.   

    代码 说话最直接
    class a{
    public void test( int c,int d){
    }
    }
    public b:a{
       public void test( string str,int c)
       {}
    }
    b  b1 = new b;
    b.test(1,2) //call a test
    b.test("haha",3)//call b test