【问题标题】:Can I make an existing (fixed) class implement a new interface?我可以使现有(固定)类实现新接口吗?
【发布时间】:2009-10-27 19:02:09
【问题描述】:

我有一种感觉,我已经知道人们会给出的答案,但还是这样:

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

【问题讨论】:

    标签: .net interface implementation


    【解决方案1】:

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

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

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

    【讨论】:

    • +1 - 尤其是构造函数重载的部分。
    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 2010-09-16
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多