【发布时间】:2014-03-18 18:36:08
【问题描述】:
当抽象类实现接口时,还需要定义或声明方法(如before 所问):
public interface MyInterface
{
void Method();
}
public abstract class MyAbstractClass : MyInterface
{
public abstract void Method(); // required, even though MyAbstractClass does not implement
}
public class MyClass : MyAbstractClass
{
public override void Method()
{
}
}
public interface MyInterface2 : MyInterface
{
// no need to declare Method() -- why can't abstract classes do the same for unimplemented methods?
}
c# 语言要求定义实现接口的抽象类的抽象方法的设计原理是什么?要求抽象类定义一个它没有实现的方法似乎是完全多余的(更糟糕的是,对于实际实现该方法的类必须将该方法标记为覆盖)。我看不出为什么抽象类不能像 MyInterface2 那样表现,它继承自 MyInterface 但不需要声明 MyInterface 的方法。
【问题讨论】:
-
这就是接口的工作方式。它们保证方法存在,即使抽象类将其声明为抽象;这意味着继承该类的人必须实现该方法,这意味着该接口得到维护。编辑:这是我对其工作原理的微小理解。
-
否则你会得到一个奇怪的层次结构,从你的抽象类派生的任何东西都需要记住它是从实现了所述接口的类派生的。
-
如果您不希望抽象类具有接口方法,您可以将接口添加到具体类,而不是抽象类。
-
感觉像是一个草率的心智模型
-
我不明白为什么这个问题被标记为基于意见。 c# 语言设计者似乎对语言的设计相当理性,这个问题是询问特定要求的基本原理是什么。改写问题以强调这一点。