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

【无标题】C#构造函数详解|基础+继承实战(银行账户案例)

一、什么是构造函数

构造函数是与类名同名、没有返回值的特殊方法。 在new创建对象时自动执行,主要用于给对象字段/属性做初始化赋值。

核心规则

  1. 方法名必须和类名完全一致,不能写void
  2. 只能new的时候自动调用,不能手动调用;
  3. 写了带参构造,编译器就不再自动生成默认无参构造。
public class Account { //带参构造函数 public Account(string id,string name,decimal balance) { AccountId = id; OwnerName = name; Balance = balance; } public string AccountId { get; set; } public string OwnerName { get; set; } public decimal Balance { get; set; } } //创建对象,自动执行构造函数 Account acc = new Account("A001","张三",1000);

二、构造函数常见类型

1. 默认无参构造

如果类不写任何构造函数,编译器偷偷生成一个public 类名(){}无参构造。

⚠️只要手写任意带参构造,默认无参构造就消失,想要用就得手动写。

2. 带参构造函数

实例化的时候直接传入初始数据,项目开发最常用。

3. 构造函数重载

一个类可以有多个构造函数,参数列表不同即可构成重载

public Account(){} public Account(string id):this(id,"未知",0){} public Account(string id,string name,decimal balance){}

4. this():调用本类其他构造

this(参数)调用当前类别的其他构造,必须放在第一行,减少重复代码。

public Account(string id):this(id,"匿名用户",0) { }

三、继承中的构造函数 base()【重点】

  1. 创建子类对象时,会先调用父类构造,再执行子类构造
  2. 如果父类没有无参构造,子类必须用base(参数)显式调用父类带参构造,否则编译报错。
  3. base()同样只能写在构造函数第一行。

银行账户案例(抽象父类+子类)

public abstract class Account { public string AccountId { get; set; } public string OwnerName { get; set; } public decimal Balance { get; set; } //父类带参构造,没有无参构造 public Account(string id, string name, decimal balance) { AccountId = id; OwnerName = name; Balance = balance; } } //储蓄账户子类 public class SavingsAccount : Account { public double Rate { get; set; } //base调用父类构造,把公共参数传给父类 public SavingsAccount(string id, string name, decimal balance, double rate) : base(id, name, balance) { Rate = rate;//子类自己独有的字段初始化 } }

抽象类不能new实例,但可以写构造函数,专门供子类通过base调用。

四、执行顺序

父类实例构造 → 子类实例构造

静态构造函数优先执行,整个程序生命周期只跑一次。

五、高频踩坑小结

  1. 写了带参构造,无参构造就没了,需要就手动添加;
  2. 继承父类只有带参构造,子类必须写base(xxx)
  3. this()base()只能写在构造函数第一行;
  4. 构造函数不能加virtual、override、static修饰;
  5. 构造函数尽量只做初始化,不要写复杂业务逻辑。

六、小总结

构造函数是面向对象初始化的核心:

  • this():调用本类其他构造;
  • base():子类调用父类构造;
  • 抽象类可以有构造,服务子类继承初始化。

文章到这里,如果对你有帮助,欢迎点赞收藏~

http://www.jsqmd.com/news/1356802/

相关文章:

  • 醴陵哪家智能锁更靠谱服务好
  • 南通网站建设制作:企业数字化转型的必修课与避坑指南
  • 2026年8月湖南省怀化市移动宽带怎么选_避坑指南 - 找卡家园
  • 3个技术沟通难题,Mermaid Live Editor如何帮你轻松解决?
  • 从大厂AI工程师转型开源模型:实战指南与技能跃迁
  • 深入解析Nacos服务发现四层模型:从Namespace到Instance的微服务治理实践
  • Java反射机制核心:Class类源码解析与实践
  • 为什么我对照片的排序总是与Windows系统的不一样呢?
  • 2026年8月湖南省电信1000M单宽带办理避坑指南 - 找卡家园
  • 从AI Agent到智能家居:基于LLM的AI硬件开发实战指南
  • Cocos Creator游戏开发入门:从零到一构建跨平台2D游戏
  • TradingAgents:用多智能体 LLM 模拟投研团队的交易框架
  • SQL注入实战:从手工探测到自动化利用的靶场攻防演练
  • AI分析图高效提示词框架:从概念到实战的CRISP指南
  • 2026年8月湖南省怀化市移动宽带办理避坑全攻略 - 找卡家园
  • Excel COLUMN函数实战:动态报表与自动化技巧
  • Qwen3.8-Max深度评测:从基准测试到多智能体协作,Agent能力如何重塑AI应用
  • 涨停板封板质量打分系统实战:基于本地逐笔数据的Python实现
  • 应对AI API价格波动:构建供应商无关的抽象层架构实践
  • AI时代编程品味:从代码实现到优雅设计的进阶指南
  • 如何高效解密QMC文件:3种实战方法完全指南
  • 5G城市内涝积水监测预警物联网系统方案
  • LemoChat性能超越的详细分析
  • 2026国赛报名季:从组委会第一次通知到各校8月报名通知,赛程报名评奖官方口径一次讲清
  • 2026年8月湖南省怀化市移动单宽带怎么报装 - 找卡家园
  • 基于规则引擎构建游戏化经济模拟系统:从《我的世界》模组到通用架构设计
  • 局域网多DHCP服务器冲突:原理、实验与排查指南
  • JavaScript数据类型详解:从基础到高级实践
  • 2026年手机护眼钢化膜选购指南:从磁控溅射AR膜到圆偏振光技术,悟赫德观复盾的真实体验报告
  • Git版本控制系统入门与实战指南