您是否可以拥有仅由公共接口在内部使用的内部接口

时间:2012-07-13 08:28:07

标签: c# inheritance interface accessor

我想要按照以下方式做点什么:

internal interface IInternalStore
{
    object GetValue(object key);
}

public interface IStore<in TKey, TValue>
    : IInternalStore
{
    TValue GetValue(TKey key);
}

public interface IStore
    : IInternalStore
{
    TValue GetValue<in TKey, TValue>(TKey key);
}

我想这样做的原因是我可以检查该类是否为IInternalStore而无需检查各个接口类型。

IE。

// Defined by the implementing developer
public class MyStoreA
    : IStore<int, int>
{
    int GetValue(int key);
}

public class MyStoreB<TKey, TValue>
    : IStore
{
    TValue GetValue(TKey key);
}

// Internal method used by me
void GetValueFromStore(object store)
{
    if (store is IInternalStore)
    {
       {do something}
    }
}

但是从我所看到的,我想要做的是不可能的,因为IInternalStore必须与继承的接口具有相同的访问器,并且它需要开发人员实现所有继承的方法。

我错了吗?有办法做我想要的吗?

1 个答案:

答案 0 :(得分:2)

  

我错了吗?有办法做我想要的吗?

不,你是对的 - 公共界面不能扩展内部界面。

我建议您将这两个界面分开。然后,您可以随时拥有一个内部接口,如果您愿意,可以扩展它们,或者只是让相关的类实现这两个类。