我有一个如下所示的方法。它将表单作为参数传递,Form1 form
.这是因为我使用调用edit.DropHire(this)
从名为 Form1 的表单调用该方法;
该方法的内容与我想用于其他几种形式的内容完全相同,但我想避免代码重复。有没有办法根据调用方法时的形式更改方法的参数。即表格 2 更改为DropHire(Form2 form)
,表格 3DropHire(Form3 form)
DropHire(Form4 form)
表格 4。
当前方法:
public void DropHire(Form1 form)
{
form.textbox1.Text = "123";
}
如果我从另一种形式调用它,我想将其更改为什么示例:
public void DropHire(Form2 form)
{
form.textbox1.Text = "123";
}
当然可以,只需将Form1
、Form2
更改为Form
,因为它们都是继承Form
:
public void DropHire(Form form)
{
//Irrelevant information to the question I'm asking
}
评论中已经提到过,但是您是否考虑过实施和Interface
?
如果Form
、Form1
、Form3
等具有相似或一些相同的成员,那么您可以考虑将相似的成员放入一个Interface
中,并在每个类或Form
上继承该Interface
。
然后,您只需将每个方法传递给Interface
。像这样:
public interface IForm
{
public Int64 Method1(); //arbitrary methods and properties
public string Name { get; set; }
public string Job { get; set; }
}
那么接受不同Form
类型的方法可以只接受IForm
:
public void DropHire(IForm form)
{
//do stuff relevant
}
使用可以使用Form
类和模式匹配
public void DropHire(Form form)
{
if(form is Form1 f1)
{
f1.textBox1 = "123";
} else if(form is Form2 f2)
{
f2.textBox2 = "123";
} else
throw new NotSupportedExpeption();
}
但我建议设置属性,而不是直接访问文本框等 UI 元素。
public class Form1 : Form
{
...
public string Info
{
get => textBox1.Text;
set => textBox1.Text = value;
}
}
同样适用于Form2
public class Form2 : Form
{
...
public string Extra
{
get => textBox1.Text;
set => textBox1.Text = value;
}
}
然后使用属性读取/写入信息:
public void DropHire(Form form)
{
if(form is Form1 f1)
{
f1.Info = "123";
} else if(form is Form2 f2)
{
f2.Extra = "123";
} else
throw new NotSupportedExpeption();
}