C#中区别多态、重载、重写的概念和语法结构
转自:http://hi.baidu.com/yman88/blog/item/73b962eebcdf78feb2fb9582.html
重写是指重写基类的方法,在基类中的方法必须有修饰 符virtual,而在子类的方法中必须指明override。
格式:
基类中:
public virtual void myMethod()
{
}
子类中:
public override void myMethod()
{
}
重写以后,用基类对象和子类对象访问myMethod()方法 ,结果都是访问在子类中重新定义的方法,基类的方法相当于被覆盖掉了。
重载
用于在给定了参数列表和一组候选函数成员的情况下,选择 一个最佳函数成员来实施调用。
public void test(int x,int y){}
public void test(int x,ref int y){}
public void test(int x,int y,string a){}
重载特征:
I.方法名必须相同
II.参数列表必须不相同,与参数列表的顺序无关
III.返回值类型可以不相同
=========================
但如果有泛型,就要注意了!
多态
c#的多态性主要体现在类的继承上:
子类继承父类的时候,可能出现同名但方法定义不同的情况,
所以在子类中会将原方法覆盖,实现自身的要求.
using System;
class Employee
{
virtual public void CalculatePlay()
{
Console.WriteLine("Employee");
}
};
class SalariedEmployee: Employee
{
override public void CalculatePlay()
{
Console.WriteLine("Salary");
}
};
class PolyApp
{
public static void Main()
{
Employee baseE1 = new Employee();
baseE1.CalculatePlay();
Employee baseE2 = new SalariedEmployee();
baseE2.CalculatePlay();
SalariedEmployee s = new SalariedEmployee();
s.CalculatePlay();
}
};
重写是指重写基类的方法,在基类中的方法必须有
格式:
基类中:
public virtual void myMethod()
{
}
子类中:
public override void myMethod()
{
}
重载
public void test(int x,int y){}
public void test(int x,ref int y){}
public void test(int x,int y,string a){}
重载特征:
I.方法名必须相同
II.参数列表必须不相同,与参数列表的顺序无关
III.返回值类型可以不相同
=========================
但如果有泛型,就要注意了!
多态
c#的多态性主要体现在类的继承上:
子类继承父类的时候,可能出现同名但方法定义不同的情况,
所以在子类中会将原方法覆盖,实现自身的要求.
using System;
class Employee
{
virtual public void CalculatePlay()
{
Console.WriteLine("Employee");
}
};
class SalariedEmployee: Employee
{
override public void CalculatePlay()
{
Console.WriteLine("Salary");
}
};
class PolyApp
{
public static void Main()
{
Employee baseE1 = new Employee();
baseE1.CalculatePlay();
Employee baseE2 = new SalariedEmployee();
baseE2.CalculatePlay();
SalariedEmployee s = new SalariedEmployee();
s.CalculatePlay();
}
};