如何抽象C#中参数派生为类依赖的接口方法



我有两个版本的数据管理器,以及一个抽象这两个管理器的接口。所有这两个管理器都将数据的描述作为字符串,从而隐藏特定的数据结构。

现在我需要添加一个参数为Action<Item>的方法(而不是Action<string>string存储描述(,这个操作被传递给SDK,不能修改。

在这种情况下,Action<Item>根据Item的具体实现而变化。如何以C#的方式添加此方法?


以下是示例

  1. 不同数据管理器的接口
// the interface
interface IContentManager
{
void UpdateProduct(string id, string productDescription);
// TODO: public void ApplyForAll(Action<???> op)
}
  1. 基于数据库SDK的数据管理器的第一个版本

数据库SDK提供了这些不能修改的类

class ProductItem { }
class ProductDBWriter
{
// this method cannot be modified
public void ApplyForAll(Action<ProductItem> op) { }
}

基于数据库SDK 的数据管理器

class DBContentManager
{
void UpdateProduct(string id, string productDescription) { }
public void ApplyForAll(Action<ProductItem> op)
{
_writer.ApplyForAll(op);
}
private ProductDBWriter _writer;
}
  1. 数据管理器的第二个版本,一个轻量级版本
class ProductItemSlim { }
class SlimContentManager
{
void UpdateProduct(string id, string productDescription) { }
// TODO: public void ApplyForAll(Action<???> op)
}

问题是:C#抽象ApplyForAll方法的方法是什么?

如果我理解正确,您希望创建一个依赖于未知类型的接口。这正是gernerics的初衷。假设您有一个IContentManager<T>。然后,您可以在ApplyForAll中传递Action<T>,例如,您的SlimContentManager可以实现IContentManager<SlimContent>

最新更新