首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中实现多个接口的最佳实践

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

Stack Overflow用户
提问于 2016-11-08 11:12:00
回答 1查看 75关注 0票数 0

我是在一个框架内工作的,在这个框架内,你可以做以下工作:

代码语言:javascript
复制
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();

为了让这件事起作用

代码语言:javascript
复制
class MyClass : IMyClass, ISaveable, ILock
{

}

实际上,我有一些类似于8-15个接口的东西,我需要实现它们,它们需要通过转换主对象来访问。实现这一点的最干净的方法是什么?我观察了正面的模式,但我认为这不能在这里使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 11:29:31

根据你的评论:

我希望有一个比显而易见的更好的方法。在实现不同的接口时会有大量的代码,而ILock接口并不需要真正了解ISavebale的功能。我基本上是在寻找一种干净的方法来完成这个任务,它不会导致一个类有5k行代码和200个公共函数。

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

这将是实现ISaveable、ILock等通用但独立的代码类目标的最干净的方法。

例如:

代码语言:javascript
复制
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();
    }

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40485402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档