【发布时间】:2015-11-26 06:19:05
【问题描述】:
第一件事。我希望我的标题没有误导。我尽力表达出来了。
现在,请看下面的代码。案例 1 非常简单。两种情况都按预期工作。我的问题是为什么编译器允许案例 2?是否有需要的特定场景。我想不出一个。
interface IEmployee
{
void Register(string role);
}
abstract class Employee : IEmployee
{
public void Register(string role)
{
Console.WriteLine(role);
}
}
// Case 1
class Manager : Employee
{
}
// Case 2
class Developer : Employee, IEmployee
{
}
class Test
{
public void Test1()
{
IEmployee emp1 = new Manager();
emp1.Register("manager"); // output "manager"
IEmployee emp2 = new Developer();
emp2.Register("developer"); // output "developer"
}
}
【问题讨论】:
-
当您从 Employee 继承时,您已经从 IEmployee 继承,因为 Employee 继承自 IEmployee,只需从 Employee 或 IEmployee 继承,而不是两者都继承。这是否回答了您的问题,还是您在问它为什么有效?
-
@CalebB 我已经知道你解释了什么。问题是为什么完全允许案例 2?这种设计有什么用例吗?
-
这是允许的,因为 IEmployee 是通过 Employee 的继承实现的,它实现了所有需要的 IEmployee 成员。据我所知,没有必要这样做,因为您可以显式声明 IEmployee。?用于通过Employee继承实现Developer类中的成员。
标签: c# oop inheritance interface