是否可以在C#中的外部类上叠加接口?

盖尔·萨格伯格

为了将类的具体实现隐藏在接口后面,例如用于依赖项注入,我发现提取具有我感兴趣的方法和属性的接口很有用。即使对于生成的类,我通常也可以创建部分类实现提取的接口。

但是,如果要提取外部类的接口(例如,从.dll中提取),则找不到任何方法。可能吗?

乔恩·斯基特

最简单的方法通常是包装类以实现适配器模式。因此,如果我们从以下内容开始:

public class NastyExternalClass
{
    public void Foo() { ... }
}

我们增加:

public interface IFooable
{
    void Foo();
}

public sealed class NastyExternalClassWrapper : IFooable
{
    private readonly NastyExternalClass original;

    public NastyExternalClassWrapper(NastyExternalClass original)
    {
        this.original = original;
    }

    public void Foo()
    {
        original.Foo();
    }
}

这很乏味-尽管它可以自动化,而且如果R#或类似工具已经支持它,我也不会感到惊讶-但它通常可以工作。

如果多个对象需要彼此了解并使用原始API,或者原始API添加了回调然后绕过包装器等,这将成为一个更大的问题。在这些情况下,您需要更具创造力或只是活泼而已不完美的地方:(

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章