在C#中实现多个接口的最佳实践

时间:2016-11-08 11:12:00

标签: c# inheritance design-patterns interface

我在您执行以下操作的框架内工作:

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个接口,并且需要通过强制转换主对象来访问它们。实现这个的最简洁方法是什么?我看着外立面模式,但我不认为可以在这里使用。

1 个答案:

答案 0 :(得分:3)

根据您的评论:

  

我希望有一个比明显更好的方式。将会有很多代码进入实现不同的接口,而ILock接口并不需要了解ISavebale的功能。我基本上是在寻找一种干净的方法,这样做不会导致一个类有5k行代码和200个公共函数

如果你想要一个类来实现接口,那么类需要继承接口,但是可以注入和包装功能(也就是Facade)。

这是实现ISaveable,ILock等通用但独立代码类目标的最简洁方法。

例如:

public MyClass : IMyClass, ISaveable, ILock
{
    private readonly ISaveable _saveableImplementation;
    private readonly ILock _lockImplementation;

    public MyClass(ISaveable saveableImplementation, ILock lockImplementation)
    {
        _saveableImplementation = saveableImplementation;
        _lockImplementation - lockImplementation;
    }


    public void ISaveable.Save()
    {
        _saveableImplementation.Save();
    }

    public void ILock.Lock()
    {
        _lockImplementation.Lock();
    }

}