为什么在声明派生类时必须在接口之前指定基类?

Moh*_*eem 7 .net c# inheritance

public interface ITest
{
    int ChildCount { get; set; }
}

public class Test
{
}

public class OrderPool : ITest, Test
{
    public int ChildCount
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

错误说Base类'Test'必须在任何接口之前.为什么有必要先扩展类然后实现接口?

R. *_*des 16

因为规范在第17.1.2节中说明了这一点.

  • +1,同样在Java中你首先必须编写`extends`然后`implements`.它更合乎逻辑,也许在其他语言(除了C#和Java之外)它是相同的. (2认同)
  • 请在回答中包括规范中的相关部分。第二个链接对我来说似乎很糟。 (2认同)

raz*_*ebe 8

C#仅支持继承,但允许类实现多个接口.在这种情况下,总是按照约定在同一个地方指定基类,而不是与一堆接口混合在一起更清楚.

无论如何,规范要求无论如何都是这种情况,这就是你看到错误的原因.

请记住,规范中没有任何内容表明所有接口都必须以大写"I"命名. - 那只是惯例.因此,如果您的类实现了不遵循该约定的接口,并且如果规范允许您以任何顺序指定基类和接口,那么您将无法轻易分辨哪个标识符是基类,哪个是接口.例:

class MyDerivedClass : A, B, C, D, E   // which is the base class?  
{
...
}
Run Code Online (Sandbox Code Playgroud)