VB.Net创建扩展作为数据表(索引)



我有一个与VB相关的问题。Net代码。

我看到我们可以使用的数据表:

DataTable(0) ' This return a DataRow with the selected index

在智能意义上,我看到这个功能可以实现与扩展…但是,如果我创建了一个扩展,我总是需要在使用它之前参考扩展

Public Module asdadsdas
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Always)>
    <System.Runtime.CompilerServices.ExtensionAttribute()>
    Friend Function MyExt(ByVal pMyObject As MyObject, ByVal ColumnName As String) As MyObject.ColumnData
        Return pMyObject.Columns(0)
    End Function
End Module
Public Class MyObject
    Friend Structure ColumnData
        Friend vNombre As String
        Friend vApellido As String
        Friend vTelefono As String
        Public Property Nombre As String
            Get
                Return Me.vNombre
            End Get
            Set(ByVal value As String)
                Me.vNombre = value
            End Set
        End Property
    End Structure
    Friend Columns() As ColumnData
    Public Sub add(ByVal MyColumn As String)
        ReDim Columns(0)
        Columns(0).vNombre = MyColumn
    End Sub
End Class
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Test As New MyObject
        Test.add("TEST 001")
        ' HERE IS THE PROBLEM
        Test("TEST 001")
        ' CORRECT USE
        Test.MyExt("TEST 001")
    End Sub
End Class

现在,我的具体问题是:如何在特定对象中创建默认扩展?


@competent_tech:老兄,你是个天才…谢谢你的评论!

这是我的问题的解决方案:

Public Class ColumnData
Friend Name As String
Friend LastName As String
Friend Phone As String

结束课

公共类MyColumns好友数据()作为ColumnData

Default Property Item(ByVal ColumnName As String) As ColumnData
    Get
        Return Data(0)
    End Get
    Set(ByVal value As ColumnData)
    End Set
End Property
Public Sub add(ByVal Name As String, ByVal LastName As String, ByVal Phone As String)
    If Data Is Nothing Then
        ReDim Data(0)
        Data(0) = New ColumnData
    End If
    With Data(0)
        .Name = Name
        .LastName = LastName
        .Phone = Phone
    End With

End Sub

结束课

公共类Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim Test As New MyColumns
    Test.add("Name 001", "bolanos.m", "500-2004-1000")
    Debug.Print(Test("Name 001").LastName & " - " & Test("Name 001").Phone)
    ' bolanos.m - 500-2004-1000
    Test("Name").LastName = "BOLANOS.M MODIFY"
    Debug.Print(Test("Name 001").LastName & " - " & Test("Name 001").Phone)
    ' BOLANOS.M(MODIFY - 500 - 2004 - 1000)
End Sub

结束类

为什么不给MyObject类添加默认属性呢?

Default Public Property IndexedColumn(index As String) As ColumnData
    Get
        Return Columns(index)
    End Get
    Set(value As ColumnData)
        Columns(index) = value
    End Set
End Property
Default Public Property IndexedColumn(index As Integer) As ColumnData
    Get
        Return Columns(index)
    End Get
    Set(value As ColumnData)
        Columns(index) = value
    End Set
End Property

您将需要更改结构的暴露级别,访问将为:

    Dim oColumnData = Test("TEST 001")

最新更新