当前位置: 首页 > ai >正文

【C#学习Day12笔记】抽象类、密封类与子类构造(继承)

前言

在C#第12天的学习中,我深入探索了面向对象编程的高级特性:​抽象类密封类子类构造机制。这些概念是构建健壮、可扩展软件系统的关键。本文完整保留我的课堂实践代码和命名体系,通过结构化梳理帮助大家掌握这些核心知识。所有代码示例均来自我的实际操作,包含了从理论到实践的完整过程!


一、抽象类与抽象方法:设计模板的利器

1. 抽象类核心概念

abstract class Class1
{// 普通字段public string name;public int age;// 普通方法public void Move() {Console.WriteLine("移动");}// 抽象方法(无方法体)public abstract void Ai();
}

2. 抽象方法实现要求

class Boss : Class1
{// 必须实现抽象方法public override void Ai(){Console.WriteLine("Boss大招");}
}class Class2 : Class1
{public override void Ai(){Console.WriteLine("小兵普攻");}
}

3. 使用场景与限制

// 抽象类不能被实例化
// Class1 c1 = new Class1(); // 编译错误// 通过子类使用
Boss b1 = new Boss();
b1.name = "赛伊德";
b1.Ai(); // 输出:Boss大招Class2 c2 = new Class2();
c2.Ai(); // 输出:小兵普攻

4. 核心价值

  • 模板设计​:定义通用结构,强制子类实现特定方法
  • 多态支持​:通过基类引用调用不同子类实现
  • 代码复用​:在抽象类中实现通用功能

二、密封类与密封方法:限制继承的利器

1. 密封类定义与使用

sealed class Class1 // 使用sealed关键字
{public int age;public string name;public void Show(){Console.WriteLine($"{name}, {age}岁");}
}// 尝试继承会编译错误
// class Class2 : Class1 { } 

2. 密封方法实现

class Base
{public virtual void Move() {Console.WriteLine("基础移动");}
}class Class2 : Base
{// 密封重写的方法public sealed override void Move(){Console.WriteLine("Class2专属移动");}
}class Class3 : Class2
{// 无法重写密封方法// public override void Move() { } 
}

3. 适用场景

  • 商业保护​:防止核心类被修改
  • 框架设计​:固定关键实现
  • 性能优化​:避免虚方法调用开销

三、子类构造:继承中的初始化顺序

1. 基础构造顺序

class Base
{public Base() {Console.WriteLine("父类无参构造");}
}class Class1 : Base
{public Class1() : base() {Console.WriteLine("子类无参构造");}
}/* 输出:
父类无参构造
子类无参构造
*/

2. 带参构造传递

class Base
{public int Age { get; set; }public string Name { get; set; }public Base(int age, string name){Age = age;Name = name;Console.WriteLine($"父类构造设置:{Name}, {Age}岁");}
}class Class1 : Base
{public int id;public Class1(int id, int age, string name) : base(age, name){this.id = id;Console.WriteLine($"子类构造设置ID:{id}");}
}// 使用示例
Class1 c2 = new Class1(20000, 18, "李四");
/* 输出:
父类构造设置:李四, 18岁
子类构造设置ID:20000
*/

3. 构造关键点

  1. 执行顺序​:父类构造 → 子类构造
  2. 隐式调用​:即使不写: base()也会调用父类无参构造
  3. 参数传递​:通过base(参数)调用父类特定构造
  4. 初始化保障​:父类字段先于子类初始化

四、综合应用:游戏角色系统设计

完整类体系

// 抽象基类
abstract class GameCharacter
{public string Name { get; set; }public int Level { get; set; }public abstract void Attack();public void DisplayInfo(){Console.WriteLine($"{Name} (Lv.{Level})");}
}// 具体角色类
sealed class Warrior : GameCharacter
{public Warrior(string name) {Name = name;Level = 1;}public override void Attack(){Console.WriteLine($"{Name}使用剑攻击!");}
}class Mage : GameCharacter
{public Mage(string name, int level) : base(){Name = name;Level = level;}public override void Attack(){Console.WriteLine($"{Name}施展火球术!");}
}// 使用示例
Warrior warrior = new Warrior("亚瑟");
warrior.Attack(); // 亚瑟使用剑攻击!Mage mage = new Mage("甘道夫", 10);
mage.Attack(); // 甘道夫施展火球术!

学习总结与收获

核心概念对比表

特性抽象类密封类子类构造
关键字abstractsealedbase()
能否实例化-
能否继承-
主要用途定义模板限制继承初始化顺序
方法限制可含抽象方法方法可密封

关键编程原则

  1. 抽象类使用​:

    • 包含通用实现
    • 定义必须实现的抽象方法
    • 适用于多态场景
  2. 密封类应用​:

    • 保护核心实现
    • 防止意外继承
    • 优化性能(JIT内联)
  3. 构造最佳实践​:

    • 显式调用父类构造
    • 保持构造逻辑简洁
    • 避免在构造中调用虚方法

设计思维提升

  1. 层次化设计​:

    
    
  2. 封装策略​:

    • 可变逻辑→抽象方法
    • 固定实现→密封方法
    • 通用功能→基类实现
  3. 初始化安全​:

    • 父类先初始化
    • 使用构造参数传递必要值
    • 避免构造循环依赖

编程箴言
"优秀的类设计如同精密的齿轮组,每个类都在系统中扮演不可替代的角色"

学习建议​:

  1. 尝试设计3层类继承体系
  2. 为关键类添加密封保护
  3. 练习使用带参基类构造
  4. 在游戏中应用角色系统设计
http://www.xdnf.cn/news/16206.html

相关文章:

  • C语言————原码 补码 反码 (超绝详细解释)
  • 服务器安装虚拟机全步骤
  • KNN算法:从原理到实战全解析
  • selenium 元素定位
  • OpenCV(04)梯度处理,边缘检测,绘制轮廓,凸包特征检测,轮廓特征查找
  • 医疗器械:DFEMA和PFEMA
  • 零基础也能创作专属歌曲:文心一言+蘑兔AI协同教程
  • 前端学习日记(十三)
  • 在 Ansys CFX Pre 中配置 RGP 表的分步指南
  • ERNIE-4.5-0.3B 实战指南:文心一言 4.5 开源模型的轻量化部署与效能跃升
  • cocos creator 3.8.6 websocke的一直报错WebSocket is not a constructor
  • 武汉烽火民生汇,盛大启航
  • Nginx 安装与 HTTPS 配置指南:使用 OpenSSL 搭建安全 Web 服务器
  • 无印 v1.6 视频解析去水印工具,支持多个平台
  • C++ : list的模拟
  • Qwen-MT:翻得快,译得巧
  • HAProxy 原理及配置
  • Nacos-服务注册,服务发现(一)
  • VS2022专业版安装扩展
  • SpringBoot(黑马)
  • Hive【安装 01】hive-3.1.2版本安装配置(含 mysql-connector-java-5.1.47.jar 网盘资源)
  • 使用 FFmpeg 实现 RTP 音频传输与播放
  • 没有 Mac,如何上架 iOS App?多项目复用与流程标准化实战分享
  • CSS3新特性深度解析:Position Sticky粘性定位完整指南
  • 基于单片机的楼宇门禁系统的设计与实现
  • 三种深度学习模型(GRU、CNN-GRU、贝叶斯优化的CNN-GRU/BO-CNN-GRU)对北半球光伏数据进行时间序列预测
  • Android Room 持久化库:简化数据库操作
  • Unity编辑器拓展 IMGUI与部分Utility知识总结(代码+思维导图)
  • golang怎么实现每秒100万个请求(QPS),相关系统架构设计详解
  • 基于STM32汽车自动智能雨刷检测雨滴系统设计