C# 如何使用存储在构造函数变量中的类名创建新对象
本文关键字:新对象 创建 对象 存储 何使用 构造函数 变量 | 更新日期: 2023-09-27 18:33:09
我在一个程序中有 8 个表单(而且还在增加)。我有这个重复的代码来实例化或恢复每个表单的"可见",并希望有一段模块化代码来执行以下代码片段中显示的这些检查:
//Some form classes:
Form f2 = new Form_DisplayCustomersList();
...and other forms too
...
///The code that I would like to modularize, so I don't have to repeat it for every form:
private void button1_Click(object sender, EventArgs e)
{
//check form status and recreate. Show and activate - as needed.
if ((f2 == null) || f2.IsDisposed)
{
f2 = new Form_DisplayCustomersList();
showForm(f2);
} else
{
if (!f2.Visible)
{
showForm(f2);
f2.Activate();
} else
{
f2.Activate();
}
}
}
所以我认为允许各种按钮单击事件调用一个可重用的方法会很好,看起来像这样:
public void displayThatView(Form fx)
{
if (fx == null || fx.IsDisposed)
{
// Form fy = new fx();
fx.Show;
}
else
{
if (!fx.Visible)
{
fx.Show;
fx.Activate();
}
else
{
fx.Activate();
}
}
}
并且能够以这种方式调用该方法,其中 f2 可以是任何变量或 Form 类型:
private void button1_Click(object sender, EventArgs e)
{
this.displayThatView(f2);
}
我刚进入 C# 几个月。我不确定是否可以做我正在尝试的事情,但它会消除一些重复的代码!
您可以创建一个静态泛型帮助程序方法,如下所示:
public static class FormHelper
{
public static TForm ShowAndActivate<TForm>(TForm form) where TForm : Form, new()
{
if (form == null || form.IsDisposed)
{
form = new TForm();
form.Show();
}
else
{
if (!form.Visible)
{
form.Show();
form.Activate();
}
else
{
form.Activate();
}
}
return form;
}
}
where TForm: Form
约束保证您的form
变量是 Form
的(子)类。 where TForm : new()
约束保证此类型的窗体存在无参数构造函数。 更多在这里: http://msdn.microsoft.com/en-us/library/d5x73970.aspx.
通过返回TForm
,您可以通知调用方是否创建了新表单。
您可以将此方法设置为扩展:
public static class Extensions
{
public static void displayThatView(this Form fx)
{
if (fx == null || fx.IsDisposed) {
Form fy = new fx();
fx.Show;
}
else {
if (!fx.Visible) {
fx.Show;
fx.Activate();
}
else {
fx.Activate();
}
}
}
}
并称之为:
private void button1_Click(object sender, EventArgs e)
{
this.displayThatView();
}