在网上看到了对方法重载和重写的定义:
方法重写:子类继承父类,并在子类中定义一个与父类中的方法名称和参数都相同的方法,就会覆盖父类中的方法,这就是方法重写,并且“重写”只有在类继承的时候才会发生。
方法重载:同一个类中有两个或两个以上的方法,方法名相同,参数列表不同,就构成方法重载。同时有继承关系的类,子类也可以重载父类的方法。这里他说有继承关系的类,子类也可以[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;
}
}
方法重写:子类继承父类,并在子类中定义一个与父类中的方法名称和参数都相同的方法,就会覆盖父类中的方法,这就是方法重写,并且“重写”只有在类继承的时候才会发生。
方法重载:同一个类中有两个或两个以上的方法,方法名相同,参数列表不同,就构成方法重载。同时有继承关系的类,子类也可以重载父类的方法。这里他说有继承关系的类,子类也可以[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;
}
}
Console.WriteLine(((SonClass)son).getName("5", 9, 10));因为你没写virturl,所以这个方法调用是和类型相关的,不是和对象相关的。
{
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