【问题标题】:instantiation of an object which its type is passed as an argument其类型作为参数传递的对象的实例化
【发布时间】:2014-10-24 09:14:01
【问题描述】:

我有一个事件,我必须实例化一个表单:

   Private Sub ParametresEtablissement(ByRef frmmain As Form, ByRef frmparametablissement As Form, ByRef OpenedForms As FormCollection, ByVal TypeOfFrmEtablissement As Type)
            If (frmparametablissement Is Nothing) Then
                frmparametablissement = New TypeOfFrmEtablissement
                frmparametablissement.MdiParent = frmmain
                frmparametablissement.Show()
            Else
End Sub

但我在这一行有一个错误:

 frmparametablissement = New TypeOfFrmEtablissement

错误是Type TypeOfFrmEtablissement is not defined

所以我需要知道:

  1. 出现此错误的原因是什么?
  2. 我该如何解决?

【问题讨论】:

    标签: .net vb.net winforms events mvp


    【解决方案1】:

    TypeOfFrmEtablissement 是什么?它有默认构造函数吗?

    您可能想查看Activator.CreateInstance。你可以传入一个对象类型作为参数,它会使用该类型的默认构造函数返回一个实例。

    Dim instance As IExample = DirectCast(Activator.CreateInstance(theType), IExample)
    

    您也可以查看 Generics 来创建对象,但我认为这对您的要求来说太过分了。

    Public Function f(Of T)() As T
        Dim tmp As T = GetType(T).GetConstructor(New System.Type() {}).Invoke(New Object() {})
        Return tmp
    End Function
    

    更新跟随 Lamloumi 的评论

    我创建了一个新项目,添加了一个新表单 (Form2),并从 Form1 构造函数中调用它,然后创建并显示了一个新的 Form2 实例。

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim frmparametablissement As Form = CreateFormInstance(Form2)
        frmparametablissement.Show()
    End Sub
    
    Private Function CreateFormInstance(Of T As Form)(type As T) As T
        Return Activator.CreateInstance(GetType(T))
    End Function
    

    【讨论】:

    • 在我的例子中,类型作为参数传递:TypeOfFrmEtablissement 是一个 windows 窗体
    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2017-01-13
    相关资源
    最近更新 更多