【发布时间】:2017-03-21 23:45:58
【问题描述】:
我正在一个框架内工作,您可以在其中执行以下操作:
IMyClass instance = Session.GetAllObjectsOfType("IMyClass")[0];
ILock lock = instance as ILock;
if(lock != null)
{
lock.Lock();
instance.DoSomething();
lock.Unlock();
}
ISaveable saveable = instance as ISaveable;
if(saveable != null)
saveable.save();
为此,我有
class MyClass : IMyClass, ISaveable, ILock
{
}
我实际上需要实现 8-15 个接口,并且需要通过转换主对象来访问它们。实现这一点的最干净的方法是什么?我研究了门面样式,但我认为这里不能使用。
【问题讨论】:
-
我不明白你的问题。让您的类实现接口,将“mainobject”转换为特定接口,调用其成员,然后就完成了。没有那么多(实际上只有一种)方法可以做到这一点。
-
我希望有一种比显而易见的方法更好的方法。不同接口的实现会涉及大量代码,而 ILock 接口并不需要了解 ISavebale 功能。我基本上是在寻找一种干净的方法来做到这一点,它不会导致一个类有 5k 行代码和 200 个公共函数。
-
Google“接口隔离原则”——它是 SOLID 原则的一部分。
-
明确一点:你到底在问什么?您是在问如何编写诸如
MyClass之类的类以与给定框架兼容?或者您是在问如何编写和/或改进框架?与此相关的是,您认为IMyClass是框架的一部分,还是您的代码的一部分,您可以更改它吗? -
我在问,有没有比上面写 MyClass 更好的方法?框架已经完成并且无法更改,IMyClass 不是框架的一部分,它是我应该在框架内工作的东西的实现,最好的解决方案是使用 toadflakz 解决方案,但是因为 MyClass 将包含大量的包装器我希望有一个更清洁的解决方案,但我想不出一个。
标签: c# inheritance design-patterns interface