C#编译报错:无对应构造函数所需参数,如何修复构造函数?
编译错误修复及代码优化方案
错误根源
编译错误的核心原因是Worker类继承自Human类,但Human类仅提供了带两个string参数的构造函数,未定义无参构造函数。C#规定:当子类未显式定义构造函数时,编译器会自动生成默认无参构造函数,该函数会尝试调用父类的无参构造函数。由于你的Human类不存在无参构造,因此触发编译报错。
修复方案
以下两种方案均可解决编译问题,同时优化代码以满足你计算薪资并展示的需求:
方案一:给Human类添加无参构造函数
在Human类中补充无参构造,让Worker的默认构造函数能正常调用父类构造:
class Human { private string value1; private string value2; // 添加无参构造函数 public Human() { } public Human(string input1, string input2) { value1 = input1; value2 = input2; } public void DisplayInfo() { Console.WriteLine("\nfirst name is: {0}", value1); Console.WriteLine("last name is: {0}", value2); } }
方案二:给Worker类添加构造函数,显式调用父类带参构造
在Worker类中定义构造函数,通过: base()语法显式调用父类的带参构造,同时传递名字和姓氏参数:
class Worker : Human { private int Hours; private int wages = 50; private int result; // 显式调用父类的带参构造函数 public Worker(string firstName, string lastName) : base(firstName, lastName) { } public int HourlyWage(int hour) { Hours = hour; result = hour * wages; return result; // 修正返回值:返回计算后的总薪资,而非输入的工时 } // 重写DisplayInfo,同时展示父类信息和薪资计算结果 public new void DisplayInfo() { base.DisplayInfo(); // 复用父类逻辑展示名字姓氏 Console.WriteLine("工作时长: {0} 小时", Hours); Console.WriteLine("时薪: {0} 元", wages); Console.WriteLine("总薪资: {0} 元", result); } }
完善Main方法以实现需求
修改Main方法,实例化Worker类并调用相关方法,完成用户输入、薪资计算和结果展示:
class Program { static void Main(string[] args) { string input1, input2; int hour; Console.Write("First name : "); input1 = Console.ReadLine(); // Console.ReadLine本身返回string,无需额外转换 Console.Write("Last name: "); input2 = Console.ReadLine(); Console.Write("Enter hours : "); hour = Convert.ToInt32(Console.ReadLine()); // 实例化Worker并传递用户输入的名字姓氏 Worker worker = new Worker(input1, input2); worker.HourlyWage(hour); // 执行薪资计算 worker.DisplayInfo(); // 展示所有信息 } }
内容的提问来源于stack exchange,提问作者Nixele Adlaon
相关产品推荐
相关产品推荐

