在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对象来访问。最干净的实现方式是什么?
根据您的评论:
我希望有一个更好的方法比明显的一个。将会有很多代码进入到不同接口的实现中,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();
}
}