是否可以根据我使用的形式更改方法参数?

  • 本文关键字:方法 参数 是否 c#
  • 更新时间 :
  • 英文 :


我有一个如下所示的方法。它将表单作为参数传递,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";
}

当然可以,只需将Form1Form2更改为Form,因为它们都是继承Form

public void DropHire(Form form)
{
//Irrelevant information to the question I'm asking
}

评论中已经提到过,但是您是否考虑过实施和Interface

如果FormForm1Form3等具有相似或一些相同的成员,那么您可以考虑将相似的成员放入一个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();
}

最新更新