C#继承中子类实例化出现两个编译错误的原因咨询
C#继承编译错误原因及修复
错误原因解析
1. 未提供ParentClass构造函数必需的'mark'参数
ParentClass只声明了带int类型参数的构造函数,没有定义无参构造函数。在C#中,子类构造函数默认会隐式调用父类的无参构造函数,但你的父类没有这个构造函数,编译器找不到合适的父类构造函数执行初始化,因此抛出该错误。
2. ChildInheritedClass没有接受1个参数的构造函数
你在Main方法里尝试用new ChildInheritedClass(600)创建子类实例,但ChildInheritedClass中未定义接受单个int参数的构造函数,编译器找不到匹配的构造函数,所以报错。
修复后的代码
using System; namespace Fundas { class ParentClass { int mark; public ParentClass(int mark) { this.mark = mark; } public void ParentClassMeth() { // 注意:原整数除法会丢失精度,若要正确计算百分比建议转浮点型 // double perc = (double)this.mark / 100; int perc = this.mark / 100; Console.WriteLine("The Percentage Obtained is : {0}", perc); } } class ChildInheritedClass : ParentClass { // 定义带参数的子类构造函数,通过base调用父类构造函数传递参数 public ChildInheritedClass(int mark) : base(mark) { // 子类构造的额外逻辑可写在此处 } static void Main(string[] args) { ChildInheritedClass obj = new ChildInheritedClass(600); obj.ParentClassMeth(); } } }
额外提示
原代码中的百分比计算用了整数除法,600/100得到的结果是6,若要显示真实百分比(如600%),建议修改为浮点型计算:double perc = (double)this.mark / 100;,避免精度丢失。
内容的提问来源于stack exchange,提问作者Abhishek Sharma
相关产品推荐
相关产品推荐

