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

本文关键字:最佳 接口 实现 | 更新日期: 2023-09-27 18:16:51

我在一个框架内工作,你做以下事情:

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个接口,它们需要通过强制转换main对象来访问。最干净的实现方式是什么?

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

根据您的评论:

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

如果你想让一个类实现接口,该类将需要继承接口,但功能可以被注入和包装(又名Facade)。

这将是实现isavailable, 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();
    }
}