C#多态-重载
1.多态-方法重载
//面向对象编程四大特性:抽象 封装 继承 多态
//多态指同一个行为具有不同表现形式的能力
//多态可以是静态或者动态的,静态指的实在编译过程中发生,动态指的是在运行过程中发生
//静态多态
//在编译过程中,通过方法重载和运算符重载来实现编译时的多态,也叫做静态绑定或早期绑定
//我们对类进行相同的new行为,出现了不同的效果,这个就可以理解成多态
//比如strs.IndexOf;//参数形式9种写法 但是方法的名字都是IndexOf,这就叫方法的重载string类的多态
//方法重载 同类同名不同参
//你可以在同一个范围内对相同的方法名有多个定义
//方法定义必须彼此不同,可以是 参数个数不同, 参数的数据类型不同, 参数的顺序不同
//不能重载的只有返回值类型不同的方法声明,修饰符不同更不算,参数名不同也不同也不算
//其实之前学的无参构造和有参构造就是重载
//构造函数的重载
publicPeople()
{
Console.WriteLine("无参构造函数");
}
publicPeople(stringa)//参数个数不同
{
Console.WriteLine("参数是字符串的有参构造函数");
}
publicPeople(inta)//参数的数据类型不同
{
Console.WriteLine("参数是int的有参构造函数");
}
//定义一个Student类 实现Study方法的重载
//public void Study()
//public void Study(string name) //参数的个数不同
//public void Study(string name,int score)
//public void Study(int score,string name) //参数的顺序不同
2.运算符的重载
//我们可以重新去定义某个类中的运算符的含义,完成自定义的运算,对象进行相应的运算符操作
//一个运算符的重载,其实就是一个方法而已,对对象执行相应的运算符操作时,会自动执行这个重载的运算符方法,运算符重载没有强制语义
- 格式:public static 返回值类型 operatop 要重载的运算符(参数){}
//static静态,不能写成实例方法,运算符不属于某一个实例,参数不能全部都是普通数值类型,至少有一个当前的类类型
//重载+运算符 计算两个盒子的体积之和
publicstaticintoperator+(Boxb1,Boxb2)
{
returnb1.Volume + b2.Volume;
}
//C#强制规定:成对重载 >/< ==/!= 否则报错
publicstaticbooloperator>(Boxb1,Boxb2)
{
returnb1.Length > b2.Length;
}
publicstaticbooloperator<(Boxb1,Boxb2)
{
returnb1.Length < b2.Length;
}
publicstaticbooloperator==(Boxb1,Boxb2)
{
returnb1.Length == b2.Length;
}
publicstaticbooloperator!=(Boxb1,Boxb2)
{
returnb1.Length != b2.Length;
}
//无法重载逻辑运算符当中的&& ||
//复合赋值运算符不能显示重载 在重载二元运算符时,也会隐式重载相应的复合赋值运算符,例如重载'+' 运算符也会隐式重载"+="
