c# - C#继承与转换

标签 c# inheritance

我得到以下异常:

InvalidCastException: Unable to cast object of type 'Employee' to type '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);
    }
也许我的大脑已经精疲力尽了,但我认为您可以将一个亚型转换为其基本类型?我在这里想念什么?也许这是一个假期...谢谢!

最佳答案

您可以将子类型转换为其基本类型。但是,您正在将基本类型的实例强制转换为子类型。

EmployeeProfile是-雇员。不一定相反。

因此,这将工作:

EmployeeProfile prof = new EmployeeProfile();
Employee emp = prof;

但是,此模型的外观设计不良。员工文件不是特殊的员工,对吗?对于员工来说,拥有个人资料更有意义。您在这里追求构图模式。

关于c# - C#继承与转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4453242/

相关文章:

python - 有没有一种在 Django 模型中模拟虚拟继承的明智方法?

java - 在两个类之间共享代码(使用抽象操作)

c# - Elasticsearch 转义空格的正确方法,?并非在所有情况下都有效

c# - DevExpress Lookup编辑问题

c# - Selenium、等待元素、页面对象模型、c# 绑定(bind)

C++ 使用继承来调整算法

c# - 跨多个文件的结构

c# - 允许从接口(interface)转换为实现的通用约束

c++ - 不带多态性的抽象基类

c++ - 类成员和继承