为了将类的具体实现隐藏在接口后面,例如用于依赖项注入,我发现提取具有我感兴趣的方法和属性的接口很有用。即使对于生成的类,我通常也可以创建部分类实现提取的接口。
但是,如果要提取外部类的接口(例如,从.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] 删除。
我来说两句