我有以下代码,我得到以下异常"InvalidCastException:无法将'Employee'类型的对象强制转换为'EmployeeProfile'."
private class Employee
{
public string Name { get; private set; }
public Employee()
{
this.Name = "employee";
}
public override string ToString()
{
return this.Name;
}
}
private class EmployeeProfile : Employee
{
public string Profile { get; private set; }
public EmployeeProfile() : base()
{
this.Profile = string.Format("{0}'s profile", this.Name);
}
public override string ToString()
{
return this.Profile;
}
}
public void RunTest()
{
Employee emp = new Employee();
EmployeeProfile prof = (EmployeeProfile)emp; // InvalidCastException here
System.Console.WriteLine(emp);
System.Console.WriteLine(prof);
}
Run Code Online (Sandbox Code Playgroud)
也许我的大脑已经烧坏了,但我认为你可以将一个子类型转换为它的基类型?我在这里错过了什么?也许是假期......谢谢!
cdh*_*wie 17
您可以将子类型转换为其基类型.但是您要将基类型的实例转换为子类型.
EmployeeProfile是一名员工.不一定相反.
因此,这将工作:
EmployeeProfile prof = new EmployeeProfile();
Employee emp = prof;
Run Code Online (Sandbox Code Playgroud)
然而,这个模型充满了糟糕的设计.员工档案不是一种特殊的员工,是吗?员工拥有个人资料更有意义.你是在这里的组成模式.
Aar*_*ver 14
所有的答案都是正确的...只是提供一个简单的简单解释......
class Employee
class Female : Employee
class Male: Employee
Run Code Online (Sandbox Code Playgroud)
只是因为你是一个Employee不会让你成为Female......