- - PR -
クラスの配列プロパティが宣言方法により、エラーとなる
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-08-29 13:50
お世話になります。クラスの配列プロパティが、クラスの宣言方法によって
エラーとなり、悩んでおります。どうかご教授をお願いします。 クラス内容 Public Class cls Private clsA As String() '内部変数宣言 'コンストラクタ処理 Sub New() ReDim clsA(0) '変数初期化 End Sub 'プロパティの宣言 Public Property clsAP() As String() Get Return clsA End Get Set(ByVal Value As String()) clsA = Value End Set End Property end Class クラス使用プログラム(クラスはDLLで使用) OKパターン Dim objcls As New cls ReDim objcls.clsAP(10) ←問題なく動作します NGパターン Dim objcls As Object objcls = New cls ReDim objcls.clsAP(10) ←エラーが発生します エラー内容 型'Object()'から型'String()'へのキャストが有効ではありません。 理由があり、どうしてもNGパターンの宣言を行うのですが、 いろいろ調べましたが、結果を出すことができませんでした。 宜しくお願いします。 | ||||||||
|
投稿日時: 2005-08-29 13:58
毎回、cls の方にキャストしないといけないですね。 # コンストラクタでいきなり ReDim で 0 の要素を確保ですか... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-08-29 14:02
お世話になります。
ReDim CType(objcls, cls).clsAP(10) ではダメですか? # じゃんぬさんとかぶってしまいました… [ メッセージ編集済み 編集者: なおこ(・∀・) 編集日時 2005-08-29 14:03 ] | ||||||||
|
投稿日時: 2005-08-29 14:04
あるいは
//うがー、レイトバインディングとかReDimとか気持ち悪いー。型つけろー、オブジェクトはnewさせろー。 | ||||||||
|
投稿日時: 2005-08-29 14:09
配列の要素数が動的なら
Stringの配列ではなくStringCollectionを使ったほうがよいのではないでしょうか? | ||||||||
|
投稿日時: 2005-08-29 14:23
object型で宣言しているために型情報が欠損しています。 キャストしてあげる必要があります。 ReDim CType(objcls2,cls).clsAP(10) Visual Basic 言語リファレンス CType 関数 http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vblr7/html/vafctCType.asp?frame=true
というエラーメッセージがでていますから、 「VB.NET キャスト」 というキーワードで検索するといいですよ。 ところでこの設計ですがちょっとまずいです。 外部から、クラス内にあるリソースの生成をさせるのはよろしくありません。 依存関係が強くなるからです。 クラスは再利用が期待されてしまいます。依存関係が強いと原因の切り離しがしにくくなります。他のコードからこのクラスを使うときにもトラブルになりやすくなります。 _________________ たつごろー codeseek こみゅぷらす | ||||||||
|
投稿日時: 2005-08-29 14:59
さて
> ReDim clsA(0) '変数初期化 配列の要素数はいくつでしょう? # あっと、今回の問題とは全然関係ないです。 | ||||||||
|
投稿日時: 2005-08-29 15:02
皆さん、ありがとうございました。
CType関数で、テストを行い無事に動くようになりました。 >配列の要素数が動的なら >Stringの配列ではなくStringCollectionを使ったほうがよいのではないでしょうか? burton999さん、ご助言ありがとうございます。StringBuilderでしょうか? 現行のPGMでは、修正が難しいので次回のVerUpに再検討します。 >外部から、クラス内にあるリソースの生成をさせるのはよろしくありません。 >依存関係が強くなるからです。 >クラスは再利用が期待されてしまいます。依存関係が強いと原因の切り離しがしにくくなります。 >他のコードからこのクラスを使うときにもトラブルになりやすくなります。 たつごろーさん、設計のご助言いただきありがとうございます。 もう少し、よいクラスを設計して向上するようにします。 |
1|2|3
次のページへ»