【问题标题】:Activator.CreateInstance MissingMethodExceptionActivator.CreateInstance MissingMethodException
【发布时间】:2012-12-19 16:46:39
【问题描述】:

我在 c# dll 中有一个类,具有以下类

public class RequiredTask : Base.BaseObject
{

    public string Name { get; set; }
    public string Description { get; set; }

    public RequiredTask() 
        : base()
    { }

}

继承自这个类

public class BaseObject : IBaseObject, INotifyPropertyChanged
{
    public DateTime? UpdatedOn { get; set; }
    public string UpdatedBy
    public DateTime? CreatedOn
    public string CreatedBy 

    public BaseObject() { }

}

然后 UI 是一个 VB.Net Winform,这个表单将是一个基本表单并且是通用的,因此它可以与 c# 库中的所有类型一起使用,并且它有一个需要实例化的新按钮任何 T 的新类型并将其传递给将用于编辑 T 的表单。

这是表单代码

Public Class Search(Of T As Library.Base.BaseObject)

        Private Sub btnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNew.Click
            If MyBase.OpenFormName <> "" Then App.mfrmMDI.OpenForm(MyBase.OpenFormName, DirectCast(Activator.CreateInstance(GetType(T), New Object()), T))
        End Sub

End Class

但我收到此错误“找不到类型“Library.Production.RequiredTask”的构造函数。当它到达

DirectCast(Activator.CreateInstance(GetType(T), New Object()), T)

【问题讨论】:

    标签: c# .net vb.net reflection


    【解决方案1】:

    您遇到了异常,因为在采用 object 类型的单个参数的类型上没有匹配的构造函数。

    将调用改为:

    DirectCast(Activator.CreateInstance(GetType(T)), T)
    

    这应该会自动调用你定义的默认构造函数。

    【讨论】:

    • 将 new Object() 更改为 Nothing 实际上不会编译,并带有重载解析错误
    • @user1584413 - 更新了答案以使用适当的重载来调用默认构造函数。
    猜你喜欢
    • 2023-04-09
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多