首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C#中抽象派生类相关的接口方法?

如何在C#中抽象派生类相关的接口方法?
EN

Stack Overflow用户
提问于 2022-02-15 14:47:57
回答 1查看 41关注 0票数 0

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

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

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

下面是一个例子

  1. 不同数据管理器

的接口

代码语言:javascript
复制
// the interface
interface IContentManager
{
    void UpdateProduct(string id, string productDescription);

    // TODO: public void ApplyForAll(Action<???> op)
}

  1. --基于数据库SDK

的数据管理器的第一个版本

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

代码语言:javascript
复制
class ProductItem { }
class ProductDBWriter
{
    // this method cannot be modified
    public void ApplyForAll(Action<ProductItem> op) { }
}

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

代码语言:javascript
复制
class DBContentManager
{
    void UpdateProduct(string id, string productDescription) { }

    public void ApplyForAll(Action<ProductItem> op)
    {
        _writer.ApplyForAll(op);
    }

    private ProductDBWriter _writer;
}

  1. 数据管理器的第二个版本,轻量级版本

代码语言:javascript
复制
class ProductItemSlim { }

class SlimContentManager
{
    void UpdateProduct(string id, string productDescription) { }

    // TODO: public void ApplyForAll(Action<???> op)
}

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

EN

回答 1

Stack Overflow用户

发布于 2022-02-15 15:17:04

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71128467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档