我可以使现有(固定)类实现新接口吗?

时间:2009-10-27 19:02:09

标签: .net interface implementation

我有一种感觉,我已经知道了人们会给出的答案,但无论如何都会这样:

假设我正在编写一个新类,我们称之为PooledQueue<T>,在我想接受实现接口IResourcePool<T>的参数的构造函数中。这里的想法是我可以使用任何底层池对象,只要它给我IResourcePool<T>的属性/方法(你知道,接口背后的整个想法,对吧?)。

但是,如果已经一个可用的类,它提供了IResourcePool<T>的所有功能,除了它没有实现 IResourcePool<T>(和我无法修改源代码),有什么方法可以强制执行吗?

我期待人们回答的是,我应该为实现必要接口的现有类创建一个包装器。但我只是希望能够做到这一点:

// GetDataPool returns an object of type Pool<Data> that I can't modify
var q = new PooledQueue<Data>(GetDataPool());

而不是:

var q = new PooledQueue<Data>(new PoolWrapper<Data>(GetDataPool()));

我想我认为真正有用的是如果一个类的接口实现可以与类定义分开定义。精心设计的数据库的结构方式 - 使用关联表将实体与其他表中的ID相关联。这有意义吗?

1 个答案:

答案 0 :(得分:2)

开箱即用,你不能在没有继承的情况下强制接口。

有一些方法,比如使用透明的RealProxy或第三方库,例如LinFU,可以让你模拟这样的东西,但成本高于制作你的包装类。

实际上,您可以创建一个为您创建包装器的重载构造函数,以便代码保持干净......