我有一个WinForm,我希望能够使用两个不同的ID值构建。例如:
var f1 = new Form(table1Id);
var f2 = new Form(table2Id);
第一个构造函数将基于table1中的数据构建表单,第二个构造函数将基于table2中的数据构建表单。问题是,如果我有两个带有int的构造函数,那么两者之间没有区别。解决这个问题的最佳方法是什么?
答案 0 :(得分:4)
考虑工厂方法而不是构造函数。命名方法是一种在参数类型相同但意味着不同的东西时消除歧义的方法。例如
public static Form CreateFromTable1(int id)
{
// instantiate, build form
return form;
}
public static Form CreateFromTable2(int id)
{
// instantiate, build form
return form;
}
答案 1 :(得分:4)
class MyForm : Form
{
public MyForm(int id)
{
// logic to distinguish id goes here
}
}
答案 2 :(得分:2)
在没有看到代码的情况下很难确认这一点,但是根据您的解释,这个课程违反了单一责任原则。
假设表单仅因数据而异,请让构造函数获取实际数据而不是ID,我假设这些ID用于获取数据。
如果它们的内容差别很大,则它们应该是两种不同的形式(可能是一个共同的抽象父类)。
根据我过去的经验,拥有一个表单来统治他们所有的心态只会造成维护噩梦。花一些时间学习SOLID原则(S =单一责任原则),你会对你开始编写的代码感到惊喜。
答案 3 :(得分:0)
在这种情况下,我创建一个枚举并将其中一个值作为参数传递,指示给出的表格类型。
答案 4 :(得分:-2)
我会使用Initialize方法,例如:
var f1 = new Form();
f1.InitA(table1Id);
var f2 = new Form();
f2.InitB(table2Id);