2012-12-19 26 views
2

我有一個C#DLL中的類下面的類Activator.CreateInstance MissingMethodException

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) 

回答

8

你得到的異常,因爲這裏對於需要object類型的單個參數的類型不匹配的構造函數。

更改呼叫:

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

這應該自動調用默認的構造函數,這是你定義了一個。

+0

改變新的對象()爲Nothing犯規實際編譯,與重載解析錯誤 –

+0

@ user1584413 - 更新了答案,使用適當的過載調用默認的構造函數。 –

+0

工作perferctly,謝謝 –