我发现很难理解C#中的继承

时间:2016-04-11 12:59:59

标签: c# inheritance

我想知道这种情况:员工继承自Person,Manager继承自Employee,哪个陈述是正确的?

Person alice = new Employee();
Employee bob = new Person();
Manager cindy = new Employee();
Manager dan = (Manager)(new Employee());

2 个答案:

答案 0 :(得分:0)

只有第一个是正确的。

答案 1 :(得分:0)

继承的一个用途是将继承类型转换为基类型的能力(不是相反。)

所以你可以做到

   $.ajax({
        type: 'GET',
        url: 'http://--------------',
        cache: false,
        data: "id:2",
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        success: function (response) {
            alert(response.data);
        },
        error: function (response) {
            alert("Error");
        }
    });

关键是你应该始终能够将继承的类型转换为其基类型之一,并将其​​用作该类型的实例。 (理想情况下,尽量避免以其他方式执行此操作 - 检查对象以查看它继承的类型。)

它被称为Liskov Substitution PrincipleSOLID中的L。)简单的解释是,您应始终能够将Manager danTheManager = new Manager(); Employee danTheEmployee = (Employee)danTheManager; Person danThePerson = (Person)danTheManager; Person alsoDanThePerson = (Person)danTheEmployee; 转换为Manager或{{1并将其用作该类型的实例,因为它继承自它们。您不希望必须检查对象的类型,因为如果它是Employee,它可以单向工作,但如果它是Person,则它的工作方式不同。