C# 4.0 C语言中的隐藏接口方法#

C# 4.0 C语言中的隐藏接口方法#,c#-4.0,C# 4.0,我有这样的等级制度: public interface IModule { void Method1(); void Method2(); } public interface IPublic { IModule Module { get; } } 在我的东西(功能切换)中,我需要将Method2()从公共接口隐藏一段时间,并将其设置为内部。它将在测试中使用,但将隐藏在发行版中。 有可能实现这样的事情吗?您可以这样实现它: public interface IModu

我有这样的等级制度:

public interface IModule
{
    void Method1();
    void Method2();
}

public interface IPublic
{
    IModule Module { get; }
}
在我的东西(功能切换)中,我需要将Method2()从公共接口隐藏一段时间,并将其设置为内部。它将在测试中使用,但将隐藏在发行版中。
有可能实现这样的事情吗?

您可以这样实现它:

public interface IModule
{
    void Method1();      
}

public interface IModule2 : IModule
{
    void Method2();      
}

public interface IPublic
{
    IModule Module { get; }
}
然后使IPublic的实际实现返回IModule2实现而不是IModule,然后在功能切换代码中将IModule转换为IModule2。您还需要在Method2实现中检查是否启用了切换

这不会将其从公共界面中删除,但会使其不易被发现。您不能完全删除它,因为它总是在那里,所以可以切换该功能


不太好,但我认为这是您的功能切换需求的结果。

除了代码设计选项之外,您还可以从接口、实现或两者中包括或省略
Method2
。例如:

public interface IModule {
    void Method1();
#if NOT_IN_PRODUCTION
    void Method2();
#endif
}

我发现了另一个魔术

public interface IPublicInterface
{
    void PublicMethod();
}

internal static class Extension
{
    public static void InternalMethod(this IPublicInterface interface);
}

这不是接口,但这已经足够了。在发布之前,此方法将移动到界面。

什么类型的测试?单元测试?2naathon:谢谢,但我不确定这是否与我的案例相关。2Ian:SpecFlow场景E2E测试在这种情况下,我需要创建用于测试的大型基础架构。E2E测试与IPPublic一起工作。如果你不能隐藏它,我不认为。如果您的测试通过公共接口进行测试,那么您的方法必须在公共接口中,然后才是公共的。只有当用户尝试使用此方法而不应使用此方法时,才能抛出。