C# 如何使用存储在构造函数变量中的类名创建新对象?

标签 c# .net winforms

我在一个程序中有 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,您可以通知调用者是否创建了新表单。

关于C# 如何使用存储在构造函数变量中的类名创建新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27310267/

相关文章:

c# - C# 中的新运算符和虚拟运算符

c# - 多个任务完成后如何调用一个任务

c# - 如何将文件路径从我的代码中取出并放入 mysql 的插入语句中?

c# - 如何指定 .NET 泛型约束中不允许的类型?

c# - 在 LAN 系统上生成备份和还原 SQL 数据库

c# - 如何在sql c#中增加一个整数

c# - 将列表项从 c# 传递到 javascript 数组

c# - 将现有接口(interface)重新用作 WCF 接口(interface)。契约(Contract)装饰是否影响现有应用程序?有什么坏处吗?

.net - 如何使用 iTextSharp 从 PDF 中提取突出显示的文本?

c# - 单元测试 Winforms UI