将共享/静态属性与Activator.CreateInstance一起使用

本文关键字:CreateInstance 一起 Activator 共享 静态 属性 | 更新日期: 2023-09-27 18:30:03

我正在将.NET 2.0 WinForms应用程序升级到.NET 4.5.2,并收到关于此代码块的两个警告:

Public Sub ShowFormAsMdiChild(ByVal newFormType As Type, _
                              ByVal mdiParentType As Type, _
                              Optional ByVal SearchID As String = "",
                              Optional ByVal curType As SearchType = SearchType.Residential)
    If SearchID = "" Then
        Dim F As Form
        F = CType(Activator.CreateInstance(newFormType), Form)
        F.MdiParent = CType(Activator.CreateInstance(mdiParentType), Form).ActiveForm
        F.Show()
    Else
        Dim F As Form
        Dim args(1) As Object
        args(0) = SearchID
        args(1) = curType
        F = CType(Activator.CreateInstance(newFormType, args), Form)
        F.MdiParent = CType(Activator.CreateInstance(mdiParentType), Form).ActiveForm
        F.Show()
    End If
End Sub

我在设置F.MdiParent的两条线路上收到以下警告:

访问共享成员、常量成员、枚举成员或嵌套类型通过一个实例;将不计算符合条件的表达式。

问题是ActiveForm属性是一个共享属性,因为代码正在创建Form的新实例,所以调用Form的共享属性会导致警告。

有没有更好的方法可以在没有警告的情况下实施?VB.NET中的首选答案,但如果你只知道如何使用C#,我可以翻译。

将共享/静态属性与Activator.CreateInstance一起使用

不需要创建MDI父类型的新实例,然后将其强制转换为FormActiveFormForm类的共享属性,因此您应该通过类名而不是通过实例来访问它。

F.MdiParent = Form.ActiveForm