具有相同参数的构造函数

本文关键字:构造函数 参数 | 更新日期: 2023-09-27 18:08:46

我有一个WinForm,我希望能够使用两个不同的ID值来构建。例如:

var f1 = new Form(table1Id);
var f2 = new Form(table2Id);

第一个构造函数将基于table1中的数据构建表单,第二个构造函数将基于table2中的数据构建表单。问题是,如果我有两个以int为参数的构造函数,这两者之间没有区别。解决这个问题的最佳方法是什么?

具有相同参数的构造函数

考虑使用工厂方法而不是构造函数。当参数类型相同但含义不同时,命名方法是消除歧义的一种方法。例如

public static Form CreateFromTable1(int id)
{
    // instantiate, build form
    return form;
}
public static Form CreateFromTable2(int id)
{
    // instantiate, build form
    return form;
}
class MyForm : Form
{
    public MyForm(int id)
    {
         // logic to distinguish id goes here
    }
}

如果没有看到代码,很难确认这一点,但是通过您的解释,这个类违反了单一职责原则。

假设表单只是数据不同,让构造函数接受实际的数据而不是id,我假设id是用来获取数据的。

如果它们在内容上有很大的不同,它们应该是两种不同的形式(可能有一个共同的抽象父类)。

根据我过去的经验,有一种形式统治所有的心态只会创造一个维护噩梦。花点时间学习SOLID原则(S = Single Responsibility Principle),你会对你开始编写的代码感到惊喜。

在本例中,我将创建一个Enum并传递其中一个值作为参数,指示给定的表类型

我将使用Initialize方法,类似于:

var f1  = new Form();
f1.InitA(table1Id);
var f2  = new Form();
f2.InitB(table2Id);