- - PR -
For Each で呼び出せるクラスを作りたいです
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-28 16:52
継承を使えばできるようになるかと思ったのですが駄目でした。
以下のように回せるクラスを作るには、どのようなクラスを作れば良いですか?すか? for a as 個別クラス in まとめクラス 個別クラス.プロパティ = "あいうえお" next | ||||||||
|
投稿日時: 2005-11-28 16:57
IEnumerable インターフェイスを実装してください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 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 | ||||||||
|
投稿日時: 2005-11-28 17:14
申し訳ありません。時差になってしまったようです。
そして重ね重ね申し訳ないのですが、「IEnumerable インターフェースの実装」ですが、これは、Inherits Hashtable の部分がいけないということだったのでしょうか? | ||||||||
|
投稿日時: 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 | ||||||||
|
投稿日時: 2005-11-28 17:17
これ、基底クラスの Item プロパティに対して、 戻り値しか相違点がないので Shadows になりませんか? それと、派生クラス側に不要な実装があります。 継承しているもので、実装が変わらないメソッドを書く必要はないです。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-11-28 17:22
いえいえ、私の方が先に書いていますから、Inherits Hashtable のことなど知らずに書いてますよ。 つまり、
ですよね。(^^;) ところで、取り出せない理由はただのキャスト ミスではないのでしょうか? どういった理由で取り出せないでいますか? キャスト ミスの例外が出ていないでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 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.機能タイトルクラス' にキャストできません。 これは、何となく理解できますが、こうやって書きたいです。 どうやってクラス側を書けば良いんでしょうか? |