概述
C#语言入门详解(刘铁锰)视频教程:https://www.bilibili.com/video/BV1wx411K7rb
IDE:VS2019
.NET Core 3.1
1.概念
///接口和抽象类(abstract)都是软件工程产物;
///具体类->抽象类->接口, 原来越抽象,内部实现的东西越来越少;
///抽象类是未完全实现逻辑的类(可以有字段和非public成员,它们代表了具体逻辑);
///抽象类为复用而生,专门用做基类,也具有解耦作用;
///抽象类中封装确定的。开放不确定的,推迟到合适的子类中去实现;
///接口是完全未实现逻辑的“类”(纯虚类;只有函数成员;成员全部public);
///接口为解耦而生:高内聚、低耦合,方便测试;
///接口是一个协约;
///接口和抽象类都不能实例化,只能用来声明变量,引用具体类的实例;
2.实例
/// <summary> 为做基类而生的抽象类与开闭原则 </summary>
interface IVehicle
{
void FillFuel();
void Run();
void Stop();
}
abstract class Vehicle:IVehicle //存在抽象方法,所以为抽象类
{
public void Stop()
{
Console.WriteLine("Stopped!");
}
public void FillFuel()
{
Console.WriteLine("pay and fill fuel");
}
public abstract void Run(); //抽象方法
}
class Car : Vehicle
{
public override void Run()
{
Console.WriteLine("car is running...");
}
}
class TrunkCar : Vehicle
{
public override void Run()
{
Console.WriteLine("trunkcar is running...");
}
}
class RaceCar : Vehicle
{
public override void Run()
{
Console.WriteLine("racecar is sunning...");
}
}
3.开闭原则
OCP(Open
Closed
Principle)一个软件实体应该对扩展开放,对修改封闭。
上述例子中,
interface IVehicle抽象出了车辆的3个必备方法:
void FillFuel();
void Run();
void Stop();
类Vehicle继承了IVehicle,
abstract class Vehicle:IVehicle
类Vehicle实现了接口中的2个方法,对于所有车辆这两个方法是相同的
public void Stop()
public void FillFuel()
剩余的1个方法void Run()作为抽象方法开放给子类。Run()可能会根据具体车辆的不同而变化,所以声明为抽象方法留给子类去实现。
public abstract void Run(); //抽象方法
声明了3个子类,
class Car : Vehicle
class TrunkCar : Vehicle
class RaceCar : Vehicle
三个子类Car、TrunkCar、RaceCar的Run()方法很显然是不同的,分别实现了public abstract void Run()
public override void Run()
{
Console.WriteLine("car is running...");
}
public override void Run()
{
Console.WriteLine("trunkcar is running...");
}
public override void Run()
{
Console.WriteLine("racecar is sunning...");
}
按照上述代码组织结构,当需要给Vehicle添加新的子类时,不需要对Vehicle进行任何修改,只需要在新的子类中实现public abstract void Run()。
最后
以上就是乐观小土豆为你收集整理的C#语言入门详解(刘铁锰)---抽象类与开闭原则1.概念 2.实例3.开闭原则的全部内容,希望文章能够帮你解决C#语言入门详解(刘铁锰)---抽象类与开闭原则1.概念 2.实例3.开闭原则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复