C#继承的问题 求各位大佬帮忙解答一下 这段代码没有报错,但是在运行的过程中却出错了!求各位前辈解答!

namespace 方法重写1
{
public class Employee //创建employee类
{
public string name; //定义类的属性
protected decimal basepay;
static decimal Man;
public Employee(string name, decimal basepay) //属性的声明,调用
{
this.name = name;
this.basepay = basepay;
}
public virtual decimal CalculatePay() //声明一个虚方法,以便於方法的重写 关键字:virtual
{
for (int i=1; i <= basepay;i++ )
{
Man += i;
}
return Man;
}
}
public class salesEmployee : Employee //创建一个子类salesEmployee
{
private decimal Min = 1; //定义子类的属性
public salesEmployee(String name, decimal basepay) : base(name, basepay) { } //声明继承父类的属性,
public override decimal CalculatePay() //重写父类的方法 关键字:override
{
for (int i = 1; i <= basepay; i++)
{
Min *= i;
}
return Min;
}
}

编译没有出错,你能不能说一下你运行时报什么错?是报错还是得到非预期结果?还有上面你只给出了类的代码,还应该加上调用或使用这类的代码。追问

salesEmployee employee1 = new salesEmployee("Stad", 5);
Employee employee2 = new Employee("Hows", 50);
Employee employee0 = employee1;

追答

报错是什么?

追问

运行後就提示这个错误!

追答

只能从子类转换为父类,而不能反过来!因为子类带有更多的信息!

追问

显性转换也不行麼?那为什麼长整形能显性转换成整形呢?
long i = 1000;
int m ;
m = (int)i ;
为什麼这样却能转换呢?

追答

有可比性么?那些是基本类型。你看到其他用户定义的类可以这样转?

追问

呵呵 不好意思,我是初学者,对这里面的东西很多都不怎麼理解,而且这两天很少接触电脑,可以给我讲讲这是为什麼嘛?自定义的类和基本类型为什麼会有这麼大的区别呢?

追答

不需要具体的编程知识,你就自己想想。销售员是员工,但员工不一定是销售员,员工再加上其他信息比如“销售产品”“销售区域”才能转换成销售员,而编译器是不知道从哪里获取这些信息的,所以无法转换。int和long就几个0的区别而已,是固定的,所以可以转换。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-29
这段代码确实没什么问题(复制上来时最后有个“}”漏了吧)。
运行时出错,可能是salesEmployee类重写CalculatePay()方法时,将求和变成了求阶乘,容易超出decimal的最大值或最小值吧。比如这样调用:
Console.WriteLine(new salesEmployee("ss", 250).CalculatePay());
第2个回答  2013-10-29
报什么错呢?我运行没错哦
相似回答