- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有以下一组接口(interface)....
public interface IStart
{
void M1();
bool IsWorking { get; }
}
public interface IStartStop : IStart
{
void M2();
event EventHandler DoM1;
event EventHandler DoM2;
}
public interface IPreferencesReader : IStartStop, IDisposable
{
string CustomColumnDefinition {get;}
bool UsePricelevelDetection {get;}
void InitializePreferences();
}
现在,如果我想实现 IPreferencesReader,我的类将如下所示。这是一个胖接口(interface)的例子,我在这里将必须提供我可能不需要在所有场景中实现的方法。
public class PreferencesReaderBase : IPreferencesReader
{
public void M1()
{
throw new NotImplementedException();
}
public bool IsWorking
{
get { throw new NotImplementedException(); }
}
public void M2()
{
throw new NotImplementedException();
}
public event EventHandler DoM1;
public event EventHandler DoM2;
public void Dispose()
{
throw new NotImplementedException();
}
public string CustomColumnDefinition
{
get { throw new NotImplementedException(); }
}
public bool UsePricelevelDetection
{
get { throw new NotImplementedException(); }
}
public void InitializePreferences()
{
DoSomeInitialization();
}
}
我可以为这个场景应用任何模式来重构它吗?
编辑:我不能没有这个层次结构,因为不能删除任何接口(interface)。
感谢您的关注。
最佳答案
您不一定需要提供有效的实现。在您的示例中,您的 IPreferencesReader 似乎不需要 IStartStop 那么您可以简单地删除它吗?
如果您想从实现类型中隐藏接口(interface)方法(即,您不会在 PreferencesReaderBase 对象上看到它),您可以显式实现接口(interface):
void IStart.Start() { }
然后,您只能通过将 PreferencesReaderBase 引用转换为 IStart 引用来调用这些接口(interface)方法。
关于c# - 如何重构胖接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3110752/
我很好奇针对包含 armv7 和 i386 代码(用于模拟器)的通用(胖)库构建是否会增加应用程序分发包的大小,或者设备的构建过程是否会删除 i386 内容并进行调试信息? 最佳答案 如果我没记错的话
我正在尝试将我的对象打包为 64 字节(自行开发的属性),并且我需要保存 getter 和 setter 成员函数。 我真的很喜欢 std::function 但太大了: sizeof(std::fu
如果传递库不是 packaged使用 JAR 任务: By default, jar task in gradle builds an executable jar file from your pr
在Sublime Text编辑器中无法有效搜索问题。当前正在使用该编辑器的最新版本。 在用这些大块命中Ctrl + Shift + FI后,我想导航到下一个文件(在图像1/138中),但我不知道如何操
我正在重新设计旧应用程序——更确切地说是设计新应用程序,我想利用旧应用程序的某些部分在未来变得更有用和可扩展。 旧应用程序是一个厚桌面应用程序,用于处理在文件服务器上共享的数据。 (它使用 DBF 数
我无法为使用 Xcode 10.2+ 构建的通用(胖)框架的模拟器(设备编译成功)编译应用程序。应用程序使用来自 Objective-C 代码的框架。当从为设备构建切换到为模拟器构建时,Xcode 停
我有一个 fat jar 子,我试图在其中获取 Kotlin 的实例 ScriptEngine . 出于调试目的,我遍历可用的脚本引擎工厂并获取引擎。 val scriptEngineManager
我是一名优秀的程序员,十分优秀!