2

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

假设我正在编写一个新类,我们称之为它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 链接起来。那有意义吗?

4

1 回答 1

2

开箱即用,您不能在不继承类的情况下强制使用接口。

有一些方法,例如使用透明的RealProxy或 3rd-party 库(例如LinFU),它们允许您模拟这样的东西,但成本比制作包装类更高。

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

于 2009-10-27T19:15:36.167 回答