这是【C# 教程系列第 11 篇】,如果觉得有用的话,欢迎关注专栏。
- 一:什么是抽象类、抽象方法
- 二:抽象类的特性
- 1:抽象类不能实例化
- 2:抽象类可以包含抽象方法和抽象访问器
- 3:不能用 sealed 关键字修饰抽象类
- 4:从抽象类派生的非抽象类,必须包括继承的所有抽象方法和抽象访问器的实现
- 三:抽象方法的特性
- 四:抽象方法与抽象类之间的关系
- 五:抽象类与一般类的相同点及不同点
这是比较官方的说法,下面用我自己的语言来描述下
一:什么是抽象类、抽象方法在 C# 中,使用关键字 abstract 来定义抽象类和抽象方法。
二:抽象类的特性抽象类是一种特殊的基础类,并不与具体的事物联系。它有以下特性
1:抽象类不能实例化验证如下:
public abstract class Car
{
}
验证代码如下:
//抽象方法
public abstract void Run();
//抽象访问器
public abstract string Name { get; }
3:不能用 sealed 关键字修饰抽象类
通常情况下,我们会把抽象类视为公共基类,如果使用了sealed 修饰符,这意味着抽象类将不能被继承 验证如下:
验证如下:
一个抽象方法通俗易懂的说就是一个没有方法体的方法。它有以下特性 1):抽象方法是隐式的虚方法。 2):只允许在抽象类使用抽象方法声明。 3):因为抽象方法声明不提供实际的实现,所有没有方法体。方法声明只是以一个分号结束,并且在签名后没有大括号,实现由一个重写方法提供,此重写方法是非抽象类的成员。 4):在抽象方法声明中使用static或virtual修饰符是错误的。 5):除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。 6):在静态属性上使用abstract修饰符是错误的。 7):在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。
下面两种抽象方法的写法都是可以的
//抽象方法
public abstract void Run();
abstract public void Stop();
只不过将 abstract 放到访问修饰符前面时会提示你“修饰符声明顺序不一致”,但这样写也没错,只不过我喜欢第一种写法,看着舒服。 另外,抽象方法不能设置为私有的(因为抽象方法写出来就是为了子类继承实现的) 验证如下
有抽象方法的类必然是抽象类, 但是,抽象类中的方法并不一定都是抽象方法。
五:抽象类与一般类的相同点及不同点相同点: 都可以继承其它的类或者接口,也可以派生子类,并且都有具体的方法; 不同点: 抽象类中有抽象方法,一般类中没有; 抽象类不可以实例化,一般类却可以;
当然,概念毕竟只是概念,只能让我们简单的认识抽象类及抽象方法,拿例子分析会更好点,所以这里我补充了一篇 C# 抽象类的简单实现 的博客,希望可以帮到你。
你的问题得到解决了吗?欢迎在评论区留言。
赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。
结束语 技术是一点一点积累的,大神也不是一天就可以达到的。原地不动就是退步,所以每天进步一点点。 最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。