为什么继承具有名称签名的接口成员的C#抽象类至少需要实现其中一个成员?

为什么继承具有名称签名的接口成员的C#抽象类至少需要实现其中一个成员?,c#,java,oop,inheritance,abstract-class,C#,Java,Oop,Inheritance,Abstract Class,如果抽象类实现的接口声明具有相同签名的成员,则抽象类可以实现两个成员,或者将其中一个成员声明为抽象,然后实现另一个成员 不管出于什么原因,C#抽象类(与Java抽象类不同)不能“忽略”继承的接口成员。但是为什么他们不能只声明其中一个抽象的,然后让具体的派生类型处理这两个成员的实现呢 如果由于某种语言限制,这太难看或不可能,那么就像继承具有相同签名的接口成员的具体类必须明确地实现其中至少一个一样,为什么抽象类不能显式地声明一个继承的接口成员为抽象的?是出于同样的原因吗?这很好: interface

如果抽象类实现的接口声明具有相同签名的成员,则抽象类可以实现两个成员,或者将其中一个成员声明为抽象,然后实现另一个成员

不管出于什么原因,C#抽象类(与Java抽象类不同)不能“忽略”继承的接口成员。但是为什么他们不能只声明其中一个抽象的,然后让具体的派生类型处理这两个成员的实现呢

如果由于某种语言限制,这太难看或不可能,那么就像继承具有相同签名的接口成员的具体类必须明确地实现其中至少一个一样,为什么抽象类不能显式地声明一个继承的接口成员为抽象的?是出于同样的原因吗?

这很好:

interface IFoo
{
  void Foo();
}

abstract class FooBase : IFoo
{
  public abstract void Foo();
}

在重读这个问题之后,我意识到我们谈论的是继承多个接口。我不确定这种情况,但说真的,为什么要使用两个具有相同名称成员的接口。糟糕。

如果一个类继承了两个具有相同名称成员的接口,但不能对这两个接口使用相同的实现,那么它通常应该使用只链接到受保护方法(可能是虚拟的或抽象的)的方法显式实现成员。对于派生类来说,实现同样由基实现的接口通常是一件坏事。可继承类通常最好使用虚函数或抽象函数实现接口,这样派生类就可以在不接触接口的情况下重写这些接口。

您是否尝试过这些方法,或者您是否在猜测?在C#中,您所要求的始终是可能的。也许.net男孩认为,当接口的一个成员是抽象的时,接口没有完全实现。从合理的角度来看,…
IEnumerable
IEnumerator
可能是.NET中实现最多的两个接口,它们的继承意味着所有实现都实现了两个同名接口。当然,在这些情况下,它们应该如何链接是非常明显的,但有时人们无法选择调用接口的成员,因为是其他人编写的。