- PR -

型指定DataSetの自動生成されるコードについて

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2007-04-24 12:14
VS2005です。

型指定DataSetを作成した場合に自動で生成されるコードを
勉強しております。

そこで質問なのですが
DataTableクラスのItemプロパティで
DataRowオブジェクトを型指定されたDataRowにキャストする部分で
キャストエラーが発生しないのはどこのコードが絡んでいるのでしょうか?

Public Default ReadOnly Property Item(ByVal index As Integer) As XXXXXRow
Get
Return CType(Me.Rows(index),XXXXXRow)
End Get
End Property
masa
大ベテラン
会議室デビュー日: 2004/10/28
投稿数: 161
投稿日時: 2007-04-24 12:54
> return CType(Me.Rows(index),XXXXXRow)

ここで XXXXXRow 型にキャストしているわけですが、
もし Me.Rows(index) がXXXXXRow 型を継承していなければキャストに失敗しますよね。

Me.Rows が public で公開されている場合、
Add メソッドを使って自由に DataRow が格納されてしまう可能性があります。
Me.Rows は内部に隠蔽し、
かわりに Add( row as XXXXXRow ) のようなメソッドが定義されていたりしませんか?

※ 型付けデータセットのソースは読んでいません。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-04-24 13:25
引用:

未記入さんの書き込み (2007-04-24 12:14) より:
VS2005です。

型指定DataSetを作成した場合に自動で生成されるコードを
勉強しております。

そこで質問なのですが
DataTableクラスのItemプロパティで
DataRowオブジェクトを型指定されたDataRowにキャストする部分で
キャストエラーが発生しないのはどこのコードが絡んでいるのでしょうか?

Public Default ReadOnly Property Item(ByVal index As Integer) As XXXXXRow
Get
Return CType(Me.Rows(index),XXXXXRow)
End Get
End Property


ごめん。質問自体が理解不能。
これのどこが疑問なの?
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2007-04-24 13:46
ぶさいくろう様
質問の仕方が不十分ですいませんでした。
型指定DataSetの機能を独自のクラスに応用できればと自動生成されたコードを
眺めております。

例えば下記のようなコードを書いたとしても
XXXXDataTableのItemプロパティでキャストエラーになるのですが
型指定されたDataSetはどのように関連づいているのか疑問に思った次第です。

よろしくおねがいいたします。

DataTableから派生した独自のDataTableを作成します。
Partial Public Class XXXXXDataTable
Inherits DataTable

Public Sub New()
MyBase.New()
'ここでテーブルの列定義を行います。
End Sub

Default Public ReadOnly Property Item(ByVal index As Integer) As XXXXXDataRow
Get
Return CType(Me.Rows(index), XXXXXDataRow)
End Get
End Property
End Class

DataRowから派生した独自のDataRowを作成します。
Partial Public Class XXXXXRow
Inherits System.Data.DataRow
・・・略・・・
End Class
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2007-04-24 14:15
解決しましたので報告します。
自動生成されたコード内で下記コードが関連しておりました。

ありがとうございました。

Protected Overrides Function NewRowFromBuilder(ByVal builder As System.Data.DataRowBuilder) As System.Data.DataRow
Return New XXXXXDataRow(builder)
End Function
1

スキルアップ/キャリアアップ(JOB@IT)