考虑以下继承:
abstract class Employee
{
private string empID;
private string empName;
}
class SoftwareDeveloper : Employee
{
............
}
class MarketingPerson : Employee
{
...........
}
static void Main()
{
Employee Jaffer = new SoftwareDeveloper();
Employee George = new MarketingPerson();
// Ok because of is-a relationship
LayOff(Jaffer);
// Ok because of is-a relationship
LayOff(George);
object Leo = new MarketingPerson();
// Error because downcast is required as (MarketingPerson) Leo
LayOff(Leo);
}
static bool LayOff(Employee emp)
{
// some Business Logic
return true;
}
Run Code Online (Sandbox Code Playgroud)
即使声明object Leo = new MarketingPerson()指向MarketingPerson的一个实例,为什么我需要向下转换?
您需要进行强制转换,因为编译器只知道声明的类型.
在您的示例中object Leo = new MarketingPerson();,您声明变量Leo是类型object.你可以MarketingPerson在该变量中放置一个(或其他任何东西),但它仍然被声明为object.
该LayOff方法被声明为接受Employee- 因为object不是从中派生出来的employee,你需要将它强制object转换为告诉编译器"我强迫它进入Employee
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |