1

私が持っているとします:

Public Class clsTest
   Public Sub New()
   End Sub

   Public Sub New(name_ As String)
      '...
   End Sub
End Class

このクラスを次のように拡張したい:

<System.Runtime.CompilerServices.Extension> _
Public Sub methodA(t1 As clsTest, i As Integer)
    '...
End Sub

しかし、コンストラクターを次のように拡張することはできません:

<System.Runtime.CompilerServices.Extension> _
Public Sub New(t1 As clsTest, name_ As String, i As Integer)
    '...
End Sub
4

1 に答える 1

3

コンストラクターを拡張メソッドで拡張することはできません。static拡張メソッドは、書き込みを可能にする( sharedVB の) メソッドとほぼ同じです。

instanceOfMyClass.SomeExtension(someParameter)

それ以外の

MyClass.SomeExtension(instanceOfMyClass, someParameter)

へのアクセス権がない(名前clsTestを実際に変更する必要があります) が、とにかくそれを拡張したい場合は、それを継承する新しいクラスを作成することもできます。

Public Class Foo ' consider this as your clsTest
    Public Sub New()
    End Sub
    Public Property Name As String
    Public Property Number As Int32
    Public Sub New(name As String)
        Me.Name = Name
    End Sub
End Class

Public Class Bar
    Inherits Foo

    Public Sub New(name As String, i As Integer)
        MyBase.Name = name
        MyBase.Number = i
    End Sub
End Class

最後に、クラスを拡張する必要はないかもしれませんが、ワンライナーで初期化する便利な方法を探しているだけです。

Dim foo = New Foo("test") With {.Number = 4711}
于 2013-01-18T13:32:15.243 に答える