Projects、Tables、Rows、および Fields という汎用データ オブジェクトを含むライブラリが提供されました。私のプログラムには、Building という単一のプロジェクトがあり、そのテーブル 1 には「ユニット」が含まれ、テーブル 1 のフィールド 1 は「ユニット名」です。それで私がしたことは...
Public Class Unit
Private myRow As Row
Public Sub New(ByRef R as Row)
myRow = Row
End Sub
Public Function Unitname() as String
Return myRow.Fields(1)
End Function
... etc ...
End Class
それはそれほど悪く見えませんか?しかし、私は Unit オブジェクトをロードしていません。Row を持っています。それで、別のクラスも作成する必要があります...
Public Class Building
Private myProj as Project
...
Public Function Units() As List(Of Unit)
Dim ans as New List(Of Unit)
For Each R In myProj.Tables(1).Rows
ans.Add(new Unit(R))
Next
Return ans
' or I could use myProj.Tables(1).Rows.ConvertTo(Of Unit)
End Function
...etc...
そしてもちろん、Units のリスト、およびその他の数十のリストとアクセサーを取得できるように、建物のリストを作成する必要があります。別。
それは機能し、配送が機能であることを知っています. しかし、私が本当にやりたいのは、次のようなユニットを作成することです...
Public Class Unit
Inherits Row
...
End Class
次に、List(Of Row) を List(Of Unit) に「逆キャスト」します。これにより、多くのコードが削除されるだけでなく、ダングリング ポインターが削除され、メモリが大幅に削減され、時間がかかるセットアップ セットが削除されます。理論的には可能ですが、コード以外に違いはありませんが、VB.Net でそれを行う方法がわかりません。
Obj-C では、これはスウィズリング (および/または拡張機能) と呼ばれ、Java にも同様の概念があると思います。ADO.Net はこのようなことをしなければならないと思いますか? 私が見逃している「これをその中にラップする」機能はありますか?