我有一个与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")