隐藏C#中的接口方法

时间:2014-10-30 11:13:00

标签: c#-4.0

我有这样的等级:

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

public interface IPublic
{
    IModule Module { get; }
}

在我的东西(功能切换)中,我需要从公共接口隐藏Method2()一段时间并将其设置为内部。它将用于测试,但将隐藏在发行版中。 是否有可能实现这样的事情?

3 个答案:

答案 0 :(得分:0)

你可以像这样实现它:

public interface IModule
{
    void Method1();      
}

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

public interface IPublic
{
    IModule Module { get; }
}

然后让IPublic的实际实现返回一个IModule2实现而不是IModule然后在你的功能切换代码中将IModule转换为IModule2。您还需要检查Method2实现中是否启用了切换。

这不会将其从公共接口中删除,但会使其无法被发现。你不能完全删除它,因为它总是存在,所以可以切换功能。

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

答案 1 :(得分:0)

除了代码设计选项之外,您还可以使用conditional compilation在界面,实现或两者中包含或省略Method2。例如:

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

答案 2 :(得分:0)

我找到了另一个做我的魔法的技巧

public interface IPublicInterface
{
    void PublicMethod();
}

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

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