我有这样的等级:
public interface IModule
{
void Method1();
void Method2();
}
public interface IPublic
{
IModule Module { get; }
}
在我的东西(功能切换)中,我需要从公共接口隐藏Method2()一段时间并将其设置为内部。它将用于测试,但将隐藏在发行版中。 是否有可能实现这样的事情?
答案 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);
}
这不是界面,但这已经足够了。在发布之前,此方法将移至界面。