2

ac#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)
4

1 に答える 1

8

タイプの単一のパラメーターを受け取るタイプに一致するコンストラクターがないため、例外が発生しますobject

呼び出しを次のように変更します。

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

これにより、定義したデフォルトのコンストラクターが自動的に呼び出されます。

于 2012-12-19T16:49:18.500 に答える