C#分部类带参构造函数未调用同类无参构造函数问题咨询
问题结论
这段代码完全符合C#语法规范,编译不会报错,问题出在你对构造函数链式调用关键字的理解有误。
核心原因
你在带参构造函数后写的: base()作用是调用当前类父类(默认是System.Object)的无参构造函数,而非调用当前类自己定义的无参构造函数。
如果需要在带参构造执行前先触发当前类的无参构造,需要将base()修改为this(),this()才是指代当前类自身的构造函数的关键字。
修复示例
只需要修改MyClass2.cs中的构造函数声明即可:
namespace ConsoleApp { public partial class MyClass { // 把base()改成this(),触发当前类的无参构造 public MyClass(string nothing) : this() { } } }
修改后运行程序,Name属性会被正确赋值为base,无参构造的断点也会正常命中。
补充规则
- C#中所有类的构造函数如果没有显式声明
:this()或:base(),默认会隐式追加:base(),也就是自动调用父类的无参构造 partial类拆分到多个文件中时,构造函数的调用逻辑和普通单文件类完全一致,没有特殊限制
内容的提问来源于stack exchange,提问作者Johnny Wu
相关产品推荐
相关产品推荐

