- PR -

For Each で呼び出せるクラスを作りたいです

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-11-28 16:52
継承を使えばできるようになるかと思ったのですが駄目でした。
以下のように回せるクラスを作るには、どのようなクラスを作れば良いですか?すか?

for a as 個別クラス in まとめクラス

  個別クラス.プロパティ = "あいうえお"

next
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-28 16:57
引用:

R・田中一郎さんの書き込み (2005-11-28 16:52) より:

継承を使えばできるようになるかと思ったのですが駄目でした。
以下のように回せるクラスを作るには、どのようなクラスを作れば良いですか?すか?


IEnumerable インターフェイスを実装してください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-11-28 17:01
ちなみに僕が作ってみたのは、次のようなものでした。
item プロパティの overload のところが怪しいのですが・・・

Friend Class まとめクラスクラス
  Inherits Hashtable

  Public Sub New()
    MyBase.New()
  End Sub

  Protected Overrides Sub Finalize()
    MyBase.Finalize()
  End Sub

  Default Public Overloads ReadOnly Property Item(ByVal key As Object) As 個別クラス
    Get
      Return CType(MyBase.Item(key), 個別クラス)
    End Get
  End Property

  Public Overrides ReadOnly Property Count() As Integer
    Get
      Return MyBase.Count
    End Get
  End Property

End Class

Friend Class 個別クラス
  Public プロパティ as string
End Class
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-11-28 17:14
申し訳ありません。時差になってしまったようです。

そして重ね重ね申し訳ないのですが、「IEnumerable インターフェースの実装」ですが、これは、Inherits Hashtable の部分がいけないということだったのでしょうか?
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-11-28 17:15
NAL-6295です。

手段の一つとしてCollectionBaseやDictionaryBaseを継承したクラスを作成するのも一つの手です。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemcollectionshashtableclasstopic.asp
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-28 17:17
引用:

R・田中一郎さんの書き込み (2005-11-28 17:01) より:

ちなみに僕が作ってみたのは、次のようなものでした。
item プロパティの overload のところが怪しいのですが・・・


これ、基底クラスの Item プロパティに対して、
戻り値しか相違点がないので Shadows になりませんか?

それと、派生クラス側に不要な実装があります。
継承しているもので、実装が変わらないメソッドを書く必要はないです。

コード:

Friend Class CollectionClass
  Inherits System.Collections.Hashtable 

  Friend Shadows Default ReadOnly Property Item(ByVal key As Object) As System.Collections.DictionaryEntry
    Get
      Return DirectCast(MyBase.Item(key), System.Collections.DictionaryEntry)
    End Get
  End Property

End Class


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-28 17:22
引用:

R・田中一郎さんの書き込み (2005-11-28 17:14) より:

そして重ね重ね申し訳ないのですが、「IEnumerable インターフェースの実装」ですが、これは、Inherits Hashtable の部分がいけないということだったのでしょうか?


いえいえ、私の方が先に書いていますから、Inherits Hashtable のことなど知らずに書いてますよ。

つまり、

引用:

申し訳ありません。時差になってしまったようです。


ですよね。(^^;)

ところで、取り出せない理由はただのキャスト ミスではないのでしょうか?
どういった理由で取り出せないでいますか?
キャスト ミスの例外が出ていないでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-11-28 17:37
お二人とも、ありがとうございます(T-T)

修正してみました。
元のサンプルがいけなかったのです。本当に申し訳ないことです。
-------------------------------
Friend Class まとめクラス
  Inherits System.Collections.Hashtable

  Public Sub New()
    MyBase.New()
  End Sub

  Protected Overrides Sub Finalize()
    MyBase.Finalize()
  End Sub

  Default Public Overloads ReadOnly Property Item(ByVal key As Object) As System.Collections.DictionaryEntry
    Get
      Return DirectCast(MyBase.Item(key), System.Collections.DictionaryEntry)
    End Get
  End Property

  Public Overrides ReadOnly Property Count() As Integer
    Get
      Return MyBase.Count
    End Get
  End Property
End Class

-------------------------------
Friend Class 個別クラス
  Public プロパティ As String
End Class

-------------------------------
Friend Class メイン処理
  Public Sub New()
    MyBase.New()
    dim まとめ as new まとめクラス
    for each 個別 as 個別クラス in まとめ ← ここで例外エラーがでます!!
      messagebox.show(個別.プロパティ)
    next
  end sub
end class

--------------------
例外エラー
型 'System.Collections.DictionaryEntry' のオブジェクトを型 'BitlanFrame.機能タイトルクラス' にキャストできません。

これは、何となく理解できますが、こうやって書きたいです。
どうやってクラス側を書けば良いんでしょうか?

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