[C#基础学习]继承
C#中极其有用的功能。
基本概念
某个类可以继承其他类的内容并继续发展。被继承的类一般叫父类,继承者一般叫子类。
一个子类只能有一个父类(C++倒是可以多继承,但是C#就不行),并且可以继承父类的父类。
class a//这是爹 { void funcDad(){} } class b: a //儿子来咯 { //这里可以引用funcDad() } class c: a,b //违法
同名成员
在子类定义了与父类同名的参数或函数,则父类的参数或函数会被子类覆盖。不推荐用。
class a{ public float num; } class b: a{ public float num;//同名成员 }
继承内的构造函数
和之前的构造函数一致
class a{ a(); } class b: a{ b(){}; }
执行顺序:a() -> b(),会先进行父类构造函数再到子类构造函数。如果父类缺失构造函数(未显式定义),但子类调用了子类构造函数,则立刻报错。必须补全父类的构造函数(即使是空)才能调用子类构造函数。
如果希望调用特定的父类构造函数,则使用base()
class a{ a(){} a(int i){} } class b: a{ b(int i): base(i){} }
访问修饰符
访问修饰符名字作用 | 作用 |
---|---|
public | 全都能访问 |
private | 仅限当前类,但子类不能直接用 |
protected | 仅限当前类,但子类也可以用 |
internal | 仅限当前程序集,也就是单个dll或单个exe内 |
sealed | 禁止任何继承 |
里氏替换原则
用父类装载子类
class dad{ void func } class child1: dad{ void childfunc1() } class child2: dad{ void childfunc2() } static void main() { dad a = new child1(); dad b = new child2(); }
但是此时父类容器不能调用子类方法。
a.childfunc1()//不能调用
解决方案: is 和 as
if( a is child1)//是否为这个类 ; else if(a is child2) ; child1 temp = a as child1;//转换为指定类,转换失败则返回空 if(temp != null)//是否为空 ....;//execute
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律