1

我们有接口和实现类:

pubic interface IStackContainer {
    const string DefaultStack = "default";
}

public class StackContainer<T> : MyBaseStackContainer<T>, IStackContainer{
    protected  internal string Stack {
        get { return Get(nameof(Stack), IInterface.DefaultStack); } //works fine
        set { Set(nameof(Stack), DefaultStack, value); }   //doesn't exist in the current context, why?
    }
}

为什么我不能在没有“IInterface.”的情况下访问 StackContainer 中的常量?

PS:我在这里的目的是将 const 放置在某个地方而不是 StackContainer 以便轻松访问它。如果它是在 StackContainer 中定义的,我可以像这样使用它:StackContainer.DefaultStack,但我认为这不是一个好的决定。

4

1 回答 1

5

微不足道,因为这就是规范所说的。

我怀疑这是为了避免多重继承带来的问题。考虑:

interface IA
{
    public const string DefaultStack = "default";
}

interface IB
{
}

class C : IA, IB
{
}

// Imagine this is allowed:
string stack = C.DefaultStack;

甚至想象一下,IA并且IB在不同的程序集中。

现在添加const string DefaultStack = "..."到是一个重大更改IB,因为这会变得C.DefaultStack模棱两可。这实际上意味着将任何const 字段添加到接口是一项重大更改,因为这可能与某个其他接口中的同名字段冲突,并破坏在某处实现这两个接口的某种类型。

于 2021-07-14T10:03:42.893 回答