vlambda博客
学习文章列表

.Net C# 抽象类,了解只需3分钟

什么是抽象类

假设现在有个需求,是实现一个宝马类,有启动方法。

实现方法如下:

public class BM 
{
public string Name { get; set; } = "宝马";

public void Start()
{
Console.WriteLine(Name + "启动了!");
}
}

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

假设我们还需要实现一个马自达类,有启动方法

  public class MZD 
{
public string Name { get; set; } = "马自达";

public void Start()
{
Console.WriteLine(Name + "启动了!");
}
}
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

仔细观察两个类,是不是基本一模一样?如果我们还要加各大汽车品牌的类呢?是不是重复重复·····

当然这样也可以实现。可当你辛辛苦苦实现,甲方爸爸说加个停止方法,你是不是懵逼了?

所以,我们可以尝试个思路,将公共的地方提取出来,公用。

具体代码如下:

  public abstract class Car
{
public string Name { get; set; }

public void Start()
{
Console.WriteLine(Name + "启动了!");
}
}

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

      public class BM : Car
{
public BM()
{
Name = "宝马";
}
}

public class MZD : Car
{
public MZD()
{
Name = "马自达";
}
}
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

注意:因为这个是抽象出来的类,所以需要添加abstract关键字。

然后我们在控制台调用

 class Program
{
static void Main(string[] args)
{
Car bm = new BM();
bm.Start();
Car mzd = new MZD();
mzd.Start();
Console.ReadKey();
}
}
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

输出结果:

宝马启动了!马自达启动了

所以,抽象类就是声明从相似的类提取的属性、方法、事件等成员,因为抽象类包含有默认实现方法,所以可以有效地减少代码量。

抽象类的特性

  • 不能被实例化;

  • 抽象类可以包括抽象方法,这是其他普通类所不能的;

  • 抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖他们;

  • 抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们;

后记

本人不是大佬,只是道路先行者,在落河后,向后来的人大喊一声,这里有坑,不要过来啊!

纵然如此,依旧有人重复着落河,重复着呐喊······
  • 1

  • 2

  • 3

技术交流Q群:1012481075 群内有各种流行书籍资料

你的一分鼓励,我的十分动力,点赞免费,感恩回馈。喜欢就点赞评论吧,双击6666~