.net基础加强
一、里氏替换:子类可以直接赋值给父类变量、父类可以强制转换为对应的子类对象
is bool 变量 is 类型
as 类型对象 变量 as 类型
MyBase mb;
MyClass1 mc1 = new MyClass1();
MyClass2 mc2 = new MyClass2();
mb = mc1;
if (mb is MyClass1)
{
MyClass1 m1 = (MyClass1)mb;
Console.WriteLine("ok");
}
else
{
Console.WriteLine("no");
}
Console.ReadKey();
MyClass2 mm2 = mb as MyClass2;
if(mm2!=null)
{
Console.WriteLine("ok");
}
else
{
Console.WriteLine("no");
}
二、多态实现方式:
1、new 隐藏基类方法实现
MyClass c1 = new MyClass();
//c1.Func();
//MyBase b = c1;
//b.Func();
((MyBase)c1).Func();//对象没有变,变的是环境,但是表现出来的结果是不一样的
//new 是隐藏基类方法,调用时看类型,类型决定调用的方法是谁提供的
Console.ReadKey();
2、virtual虚方法实现,子类override重写
class MyBase
{
public virtual void Func()
{
Console.WriteLine("父类的方法");
}
}
class MyClass:MyBase
{
public override void Func()
{
Console.WriteLine("子类的方法");
}
}
//MyBase m = new MyBase();
MyClass m1 = new MyClass();
m1.Func();//子类的方法
MyBase m = m1;
m.Func();//子类的方法
Console.ReadKey();
3、抽象方法实现
关于虚方法需要注意的几点:
1.父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
2.虚方法在父类中必须有实现,哪怕是空实现。
3.虚方法子类可以重写(override),也可以不重写
关于抽象方法注意的几点:
1.需要用abstract关键字标记
2.抽象方法不能有任何方法实现。
3.抽象成员必须包含在抽象类中。
4.由于抽象成员没有任何实现,所以子类必须将抽象成员重写。
5.抽象类不能实例化,
抽象类的作用:抽象类的作用就是为了让子类继承。
6.抽象类中可以包括抽象成员,可以包括有具体代码的成员。
7. 还有抽象方法不能用static修饰
4、接口实现
1.接口中只能包含方法(属性、事件、索引器也都是方法)
2.接口中的成员都不能有任何实现。
3.接口不能被实例化。
4.接口中的成员不能有任何访问修饰符。(默认为public)
5.实现接口的子类必须将接口中的所有成员全都实现。
6.子类实现接口的方法时,不需要任何关键字,直接实现即可。
7.接口存在的意义就是为了多态。