我有两个版本的数据管理器,以及一个抽象这两个管理器的接口。这两个管理器都将数据的描述作为字符串,隐藏特定的数据结构。
现在我需要添加一个Action<Item>参数的方法(而不是Action<string>与string存储描述),这个操作被传递给不能修改的SDK。
在这种情况下,Action<Item>根据Item的具体实现而有所不同。如何以C#方式添加此方法?
下面是一个例子
的接口
// the interface
interface IContentManager
{
void UpdateProduct(string id, string productDescription);
// TODO: public void ApplyForAll(Action<???> op)
}的数据管理器的第一个版本
数据库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;
}class ProductItemSlim { }
class SlimContentManager
{
void UpdateProduct(string id, string productDescription) { }
// TODO: public void ApplyForAll(Action<???> op)
}问题是: C#抽象ApplyForAll方法的方法是什么?
发布于 2022-02-15 15:17:04
如果我正确理解,您希望创建一个依赖于未知类型的接口。这正是老年运动的目的。假设您有一个IContentManager<T>。然后您可以在ApplyForAll中传递一个ApplyForAll,例如,您的SlimContentManager可以实现IContentManager<SlimContent>。
https://stackoverflow.com/questions/71128467
复制相似问题