为什么在实现的 class 中没有接口名称就无法访问接口中定义的常量?
Why constant defined in an interface cannot be accessed without Interface name in the implemented class?
我们有接口和实现 class:
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,但我认为这不是一个好的决定。
很简单,因为规范就是这么说的。
我怀疑这是为了避免多重继承带来的问题。考虑:
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
含糊不清。这实际上意味着向接口添加 any const 字段是一个重大更改,因为这可能与其他接口中的同名字段冲突,并破坏实现这两个的某些类型那些接口在某处。
我们有接口和实现 class:
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,但我认为这不是一个好的决定。
很简单,因为规范就是这么说的。
我怀疑这是为了避免多重继承带来的问题。考虑:
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
含糊不清。这实际上意味着向接口添加 any const 字段是一个重大更改,因为这可能与其他接口中的同名字段冲突,并破坏实现这两个的某些类型那些接口在某处。