110,538
社区成员
发帖
与我相关
我的任务
分享
//新建一个WinForm
namespace Test
{
public class A
{
public void SayHello()
{
Console.WriteLine("Hello,Base!");
}
}
public class B : A
{
public void SayHello()//重写(覆盖)
{
Console.WriteLine("Hello,Inherit!");
}
public void SayHello(string name)//重载 看参数
{
Console.WriteLine("hello," + name + "!");
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
A a = new A();
a.SayHello();//访问基类SayHello
B b = new B();
b.SayHello();//访问子类SayHello 重写(覆盖)
b.SayHello("xiao");//重载
//输出结果:
//Hello,Base!
//Hello,Inherit!
//hello,xiao!
}
}
}
public class A
{
//可被子类覆盖
public void OverloadableFunction()
{
MessageBox.Show("A.OverloadableFunction");
}
//可被子类重载实现多态
public virtual void OverridableFunction()
{
MessageBox.Show("A.OverridableFunction");
}
public static void Test()
{
B obj = new B();
//覆盖的方法是根据调用的类型变化的,你转成哪个类型就调用哪个类型的方法
obj.OverloadableFunction();//B.NewFunction
(obj as A).OverloadableFunction();//A.OverloadableFunction
//重载的方法是根据内存对象变化的
obj.OverridableFunction();//B.overrideFunction
(obj as A).OverridableFunction();//B.overrideFunction
}
}
public class B : A
{
public new void OverloadableFunction()
{
MessageBox.Show("B.NewFunction");
}
public override void OverridableFunction()
{
MessageBox.Show("B.overrideFunction");
}
}
//重载
public void fun(string key1, string key2)
{//... }
public void fun(string key1)
{ //..}
//使用的时候,根据参数的匹配来判断调用的是那个方法
//覆盖
//基类中
public virtual void fun1()
{ }
//子类中覆盖fun1
public override void fun1()
{ }
// overload
int a(){return 1;}
int a(int a){return a;}
// 方法名相同,参数列表不同,是重载;方法名相同,参数列表相同,返回类型相同,不能抛出更多的异常,是重写
class A
{
int a(int a){return a;}
}
class B : A
{
int a(int b){return b;}
}