具有相同参数的构造函数
本文关键字:构造函数 参数 | 更新日期: 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);