Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C中对象的强制类型转换_C#_Casting - Fatal编程技术网

C# C中对象的强制类型转换

C# C中对象的强制类型转换,c#,casting,C#,Casting,我有一个函数,我想让它成为显示表单的通用函数。我希望函数检查表单是否已经打开,如果已经打开,则将其置于顶部,如果没有,则创建表单的新实例并显示它 检查表单是否打开的第一部分很好,但我正在从T进行强制转换,并创建一个类型为T的新表单对象。我使用这行代码创建了表单obj=Activator.CreateInstance的实例;但它并没有显示intellisense中的所有方法和属性。其中,代码形式x=新形式1。 x将显示所有的方法和属性 我肯定我做错了什么,请给我点光亮 private s

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

检查表单是否打开的第一部分很好,但我正在从T进行强制转换,并创建一个类型为T的新表单对象。我使用这行代码创建了表单obj=Activator.CreateInstance的实例;但它并没有显示intellisense中的所有方法和属性。其中,代码形式x=新形式1。 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

        }

    }

您需要约束T以继承表单:

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


对于您的问题,更一般的答案是将obj转换为表单。

您需要约束T以继承表单:

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


对于您的问题,更一般的答案是将obj转换为Form。

无参数构造函数的约束真的那么有用吗?+1@LightStriker,是的,它允许删除对CreateInstance不必要的反射调用。@AlexeiLevenkov:实际上,新的T编译为Activator.CreateInstance。该约束将运行时错误转化为编译时错误。无参数构造函数的约束真的那么有用吗?+1@LightStriker,是的,它允许删除对CreateInstance不必要的反射调用。@AlexeiLevenkov:实际上,新的T编译为Activator.CreateInstance。该约束将运行时错误转换为编译时错误。
private static void ShowForm<T>() where T : Form, new()