ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

【无标题】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():子类调用父类构造;
  • 抽象类可以有构造,服务子类继承初始化。

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

返回列表