c# - 处理继承类中参数的最佳方法

标签 c# .net inheritance parameters

我有一个基类 ExportType以及几个实现特定数据导出的继承类。

继承的类需要几个参数来定义数据从数据库导出的方式。这些参数可以因类而异。

所以我想使用 Dictionary<string, string>为了处理导出参数,在我的基类中我放置了一个这样的方法:

public abstract void Export (Dictionary<string, string> exportParams);

这是最好的方法吗,还是有更好的方法来处理不同的参数?

最佳答案

由于您无法确定特定导出类型需要哪些参数,因此您有多种选择:

  1. 使用字典(如您建议的那样):可扩展,但没有类型安全
  2. 为接口(interface)使用基类:仍然没有类型安全,因为您需要在每个特定的导出方法中进行强制转换。
  3. 使参数特定于实现并向调用者隐藏:首选恕我直言。

如果您通过多态性隐藏了导出到调用的具体实现,那么您不应该期望它们知道您的内部参数。

我会将您的导出界面简化为:

interface IExport 
{
    void Export(); // or Export(string filename), alternatively
}

然后按照您需要的方式实例化每个具体类:

// no params
IExport txt = new TextExport();

// single string (delimiter)
IExport csv = new DelimitedExport(",");

// lots of params
IExport excel = new ExcelExport(someStronglyTypedOptions);

这样您的调用代码就不需要为传递这些参数而烦恼了。

[编辑]

总结:没有其他明显的好处,您可以通过重写以下内容轻松解决参数类型的问题:

var csv = new ExcelExport();
csv.Export(parameters);

为此:

var csv = new ExcelExport(parameters);
csv.Export();

有一次,某人 需要知道要实例化哪些参数以及如何实例化。这意味着从那时起,其他人 都可以接受 IExport 实例,并且只能调用普通的无参数方法。

您的具体实现将具有不同的构造函数,并且通常会遵循以下模式:

class ExcelExport : IExport
{
    private readonly ExcelParams _params;
    public ExcelExport(ExcelParams parameters)
    {
        _params = parameters;
    }

    public void Export() 
    {
        // do stuff
    }
}

关于c# - 处理继承类中参数的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8817831/

相关文章:

c# - 如何从列表类型中获取模板类型?

.net - IIS网址重写不起作用-404错误

c# - 无法找到 pdb 文件

c++ - 析构函数不在控制台上打印行

c++ - 友元函数是继承的吗?为什么基类 FRIEND 函数会作用于派生类对象?

C# 显示对话框线程

c# - 以编程方式为数据库中的所有对象生成脚本

c# - 为什么使用命令行构建 VS 安装项目时没有输出?

c# - 如何进行一系列异步调用,然后使用第一个线程返回的值?

scala - 如何访问 Scala 中被覆盖的数据成员?