C#编译错误:‘无对应必需形参的实参’问题排查与解决
问题原因
你的代码报错是因为父类Vehicle只定义了带参数的构造函数,C#编译器不会为显式定义了构造函数的类自动生成默认无参构造函数。而子类Car的构造函数默认会尝试调用父类的无参构造函数,找不到就会触发编译错误。
修正方法
有两种可行的修正方案:
方案一:给父类添加无参构造函数
在Vehicle类里添加一个无参构造函数,这样子类Car的构造函数就能自动调用它:
class Vehicle { public string company; public void ignition() { Console.WriteLine("Vroom Vroom"); } // 添加无参构造函数 public Vehicle() { } public Vehicle (string companyName) { company = companyName; } } class Car : Vehicle { public string model; public Car (string modelName) { model = modelName; } }
方案二:在子类构造函数中显式调用父类的带参数构造函数
如果需要强制Car实例必须指定所属公司,可以修改Car的构造函数,通过base关键字调用父类的带参数构造,同时传递公司名称:
class Vehicle { public string company; public void ignition() { Console.WriteLine("Vroom Vroom"); } public Vehicle (string companyName) { company = companyName; } } class Car : Vehicle { public string model; // 接收公司名和车型名,用base调用父类构造 public Car (string companyName, string modelName) : base(companyName) { model = modelName; } }
如果不想让Car的构造函数接收公司参数,也可以给base传一个默认值(比如空字符串):
public Car (string modelName) : base("") { model = modelName; }
内容的提问来源于stack exchange,提问作者Hassan Abid
相关产品推荐
相关产品推荐

