在C#中将类型转换为对象

tra*_*man 1 c# casting

我有一个函数,我想使通用显示表单.我希望函数检查表单是否已经打开,如果是这样,如果没有创建表单的新实例并显示它,请将其置于顶部.

检查表单是否打开的第一部分都很好但是我从T中进行了转换并创建了一个类型为T的新表单对象.我已经使用这行代码来创建表单的实例,obj = Activator.CreateInstance<T>();但它没有显示所有智能感知中的方法和属性.代码Form x = new Form1. x将显示所有方法和属性.

我相信我在这里做错了,请为我发光.

     private static void ShowForm<T>(  )
    {
        T obj = default( T );

        List<T> opened = FormManager.GetListOfOpenForms<T>();
        if ( opened.Count == 0 )
        {
            // not opened

            // obj does not show all properties and methods
            obj = Activator.CreateInstance<T>();


            // x shows all properties and methods
            frmLogin x = new frmLogin();

        }
        else
        {
            // opened

        }

    }
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

你需要约束T继承Form:

private static void ShowForm<T>() where T : Form, new()
Run Code Online (Sandbox Code Playgroud)

一旦编译器知道T保证继承Form,您就可以使用在Form其基类中定义的所有成员.

更普遍的回答你的问题是要投objForm.