《C#入门详解》刘铁猛——Lesson27-28类的重写、多态、抽象类、开闭原则

article/2025/9/27 3:31:03

重写、多态——子类对父类的纵向扩展,就是方法的版本升级。

 

override——重写,子类对父类成员的版本更新。 virtual——override

 

 

 

 

下面的例子就是多态——多态就是使用一个父类的变量引用一个子类的实例,当调用方法时,会顺着继承链往下找,找到并调用继承链上的最新版本,即会调用到子类重写后的新方法。

 virtual——名存实亡。

 

 

接口、抽象类

 为做基类而生的“抽象类”与“开放/关闭原则”。

抽象类——是指函数成员没有被完全实现的类。即只要一个类中有一个函数是抽象函数,那么这个类就是抽象类。这个函数成员使用abstract修饰,且不能是private的,因为抽象成员需要在子类中去实现它,因此子类要能访问到。抽象类不能被实例化,因此只能作为基类使用。

开放/关闭原则——是指不要随意去修改类中的代码,就是说封装到类中的方法应该都是确定的,不会轻易被修改的代码;而那些不确定的方法应该声明为抽象方法,等待子类去实现。

抽象类:abstract——override

 

纯抽象类,就是接口。

 

 


http://chatgpt.dhexx.cn/article/G99fPNJW.shtml

相关文章

《C#入门详解》刘铁猛——Lesson19委托

自定义委托类型: 模板方法实例: 回调方法示例: 多播委托示例: 同步调用(串行,单线程)示例: 多播委托也是同步调用: 隐式的异步调用示例: 执行结果发生了资源…

《C#入门详解》刘铁猛——Lesson18传值\输出\引用\数组\具名\可选参数、扩展方法

x是101,y是100 在声明函数的时候带有默认值。 静态函数,第一个参数加this修饰符,就是一个扩展方法。调用的时候可以看见向下的小箭头。

刘铁猛C#语言入门详解——学习笔记014、15、16(2)

using System; using System.Collections.Generic; namespace ConsoleApp2 {class Program{static void Main(string[] args){//c#语言对表达式的定义:a sequence of one or more operands and zero or more operators can be evaluated to a single value object m…

《深入浅出WPF》-刘铁猛学习笔记——XAML

这里有个目录 XAML是什么?导人程序集和引用其中的名称空间XAML的树型结构Attribute (特性、标记、属性)Property (属性)属性赋值字符串赋值使用属性元素( Property Element)进行复杂赋值 XAML 注释后记 XAML是什么? XAML是微软公司创造的一种开发语言&a…

《C#入门详解》刘铁猛——Lesson31泛型、partial类、枚举、结构体

泛型类如下: 泛型接口,太常用了,如下: 实现这个泛型接口的类,也是泛型类,如下: 数据结构,基本上都是泛型的。 方法也可以是泛型的,而且泛型方法更常用,泛型方…

《C#入门详解》刘铁猛——Lesson10-11-12 操作符

纵向往下走,优先级依次降低。 []操作符声明数组: typeof操作符的用法: var声明隐式类型变量: new操作符声明实例: delegate——委托,使用该操作符声明一个匿名方法的示例如下: delegate现在已过…

《C#入门详解》刘铁猛——Lesson22-23LINQ

事件是基于委托的,事件是对委托类型的包装,事件是语法糖,委托类型才是完整格式,保护委托类型不会被外部随便调用。 就像属性是基于字段的,属性是字段的包装,用于防止字段被外部乱用。 三年后的视频。。。 …

刘铁猛《C#语言入门详解》——委托详解

委托详解 事件 using System; using System.Threading;namespace ConsoleAPP1 {class Program{static void Main(string[] args){Customer customer = new Customer(); //s事件拥有者Waiter waiter = new Waiter(); //事件的响应者// += 事件的订阅 customer.Order 事件 …

C#语言入门详解---委托(刘铁猛)

委托:函数指针的升级版,可以类比C语言中的函数指针进行理解 变量的本质就是以变量名所对应的内存地址为起点的一段内存,这段内存中存储的就是变量的数据,这段内存的大小由变量的数据类型决定。 函数代表算法,函数的本质是以函数名所对应的内存地址为起点的一段内存中,这…

刘铁猛《C#语言入门详解》1——详解类型、变量与对象

详解类型、变量与对象——上 C#是强类型语言,可使用dynamic实现弱类型语言的赋值操作: 数据类型 栈溢出:栈很小,分配过多内存会爆掉 内存监视器:winR,命令为:perform 详解类型、变量与对象——下 值类型在…

【C#】刘铁猛-C#语言入门详解听课笔记

叨叨在前: 这个视频共33集,油管和B站都可以看,B站有说有第二版本,但我在油管刘老师主页上没看见。 01 C#语言简介,搭建开发环境【略】 1、C#主要用来编写应用程序的 2、写程序步骤:编辑→编译[把语言转成…

【C#进阶学习】——刘铁猛老师

一、 C#语言入门详解:类、对象、类成员简介 1.1实例化对象 1.2引用变量(可以对同一个对象进行操作和访问) 1.3类 以属性为侧重点的类 以方法为侧重点的类 以事件为侧重点的类 1.4.静态成员与实例化成员 静态成员:立属于类…

AQS中公平锁和非公平锁的区别

场景:一个线程运行完毕,准备去等待队列中唤醒(unpark)线程。 公平锁: 当hasQueuedPredecessors 返回false时,则表示不需要去排队,会直接进行cas操作去修改state状态 hasQueuedPredecessors解析 …

AQS中的公平锁和非公平锁

正文 公平锁:多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。 优点:所有的线程都能得到资源,不会饿死在队列中。 缺点:吞吐量会下降很多,队列里…

公平锁和非公平锁介绍

公平锁: 解释:多个线程按照申请锁的顺序执行,先来后到。 优点:所有的线程都能得到资源,不会饿死在队列中。 缺点:吞吐量会下降很多,队列里面除了第一个线程,其他的线程都会阻塞&a…

公平锁和非公平锁的详解

公平锁 加锁时考虑排队等待问题,按照申请锁的顺序,按照FIFO规则,先申请的线程先取得锁,其他线程进入队列等待锁的释放,当锁释放后,在队头的线程被唤醒。 非公平锁 加锁时不考虑排队等待问题,直接…

可重入锁的理解及公平锁和非公平锁的具体实现

可重入锁 首先结合以下两个例子理解以下可重入锁的概念。 /*** 可重入锁:* 1、可重复可递归调用的锁,在外层使用锁之后,在内层仍然可以使用,并且不发生死锁,这样的锁就叫做可重入锁。* 2、是指在同一个线程在外层方法获取锁的时…

公平锁与非公平锁的核心原理

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章是关于并发编程中AQS的独占模式和共享模式。 本篇文章记录的基础知识,适合在学Java的小白,也适合复习中,面试中的大佬&#x1…

公平锁和非公平锁介绍,为什么要“非公平”?

什么是公平和非公平 公平锁指的是按照线程请求的顺序,来分配锁;而非公平锁指的是不完全按照请求的顺序,在一定情况下,可以允许插队。但需要注意这里的非公平并不是指完全的随机,不是说线程可以任意插队,而…

图解ReentrantLock公平锁和非公平锁实现

概述 ReentrantLock是Java并发中十分常用的一个类,具备类似synchronized锁的作用。但是相比synchronized, 它具备更强的能力,同时支持公平锁和非公平锁。 公平锁: 指多个线程按照申请锁的顺序来获取锁,线程直接进入队列中排队&a…