- れい
- ぬし
- 会議室デビュー日: 2005/11/01
- 投稿数: 346
|
投稿日時: 2005-11-03 07:55
MSDNクラスライブラリリファレンスSystem.Arrayより
Type と次元の長さを指定して、下限を持つ多次元の Array を作成します。
[Visual Basic]
Overloads Public Shared Function CreateInstance( _
ByVal elementType As Type, _
ByVal lengths() As Integer, _
ByVal lowerBounds() As Integer _
) As Array
これではだめ?
他人と共有するライブラリ作ったりするとき、
GetLowerBoundとか使わないのでしょうか…?
あれ?なんか勘違いしてるかも。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2005-11-03 08:59
配列とコレクションでは違いますよね。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- れい
- ぬし
- 会議室デビュー日: 2005/11/01
- 投稿数: 346
|
投稿日時: 2005-11-03 09:04
えっと質問の回答ではなく、
引用: |
|
mioさんの書き込み (2005-10-20 09:36) より:
そういえば、VB6.0以前はOption Baseという機能がありましたね。
私はCとかで作るほうが多かったから、おそらく全部0基底で作ってましたが…。
Dim a(3 To 5)も、.NETでは配列の使い方を変える以外どうしようもないのかな?
(個人的には使ったことないですが)
|
こっちのほうです。
Dimは配列でしたよね?
やっぱりなんかよくわかってないかも。
|
- ジブ
- 大ベテラン
- 会議室デビュー日: 2005/09/22
- 投稿数: 135
|
投稿日時: 2005-11-03 09:33
れいさん。こんにちは。元質問者のジブです。
CreateInstanceって面白いですね。
たぶん使う局面は少なそうに思うんですが、たとえばコレクションでも自分で作るのなら
似たようなことはできます。
コード: |
|
Public Class MyCollection
Inherits System.Collections.CollectionBase
Public CollectionBase As Integer
Public Sub Add(ByVal obj As Object)
MyBase.List.Add(obj)
End Sub
Default Public Property Item(ByVal Index As Integer) As Object
Get
Item = MyBase.List(Index - CollectionBase)
End Get
Set(ByVal Value As Object)
MyBase.List(Index - CollectionBase) = Value
End Set
End Property
Public Sub New()
MyBase.new()
CollectionBase = 0
End Sub
Public Sub New(ByVal NewCollectionBase As Integer)
MyBase.new()
CollectionBase = NewCollectionBase
End Sub
Public Shared Function CreateInstance(ByVal CollectionBase As Integer) As MyCollection
CreateInstance = New MyCollection(CollectionBase)
End Function
End Class
|
こういうクラスを作って、例えばこんな風に使う。
コード: |
|
Dim tCollection As MyCollection = MyCollection.CreateInstance(3)
tCollection.Add("hello !!")
MessageBox.Show(tCollection(3))
|
でも、こんな紛らわしいコレクションはないほうがよいわけなんですが。。。
互換性はしょうがないとしても、なんで
Dim tCollection as Collection とやると
Dim tCollection as System.BisualBasic.Collection になるような仕様になっているんでしょうね。
別に互換モードにしているわけでもないはずなのに。
System.CollectionとかSystem.Collections.Collectionとかなんでないんだろうというのが最初の疑問でした。
ありがとうございました。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2005-11-03 10:36
引用: |
|
れいさんの書き込み (2005-11-03 09:04) より:
Dimは配列でしたよね?
|
Dim 自体は配列ではないですよ。
この場合の Dimension は「次元」というよりは「寸法」「容積」という意味らしいです。
確かに、l To U になりました。
知らなかったです、勉強になりました。
が、流石にそのままキャストはできないみたいですね。
クラスで被せてしまえばそのまま利用できそうです。(混乱を招きますから控えるべきですけど...)
コード: |
|
Dim nArray1 As Array = Array.CreateInstance(GetType(String), 3)
Dim nArray2 As Array = Array.CreateInstance(GetType(String), New Integer() {3}, New Integer() {5})
Dim nStrings1 As String() = DirectCast(nArray1, String()) ' OK!
Dim nStrings2 As String() = DirectCast(nArray2, String()) ' キャストミス
|
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2005-11-03 10:41
引用: |
|
ジブさんの書き込み (2005-11-03 09:33) より:
なんで
Dim tCollection as Collection とやると
Dim tCollection as System.BisualBasic.Collection になるような仕様になっているんでしょうね。
別に互換モードにしているわけでもないはずなのに。
|
Microsoft.VisualBasic 名前空間がインポートされているからです。
(おそらく、ジブさんの場合はプロジェクト全体で)
つまり、省略時は、
Dim tCollection As Microsoft.VisualBasic.Collection
になっているわけです。
引用: |
|
System.CollectionとかSystem.Collections.Collectionとかなんでないんだろうというのが最初の疑問でした。
|
型のようなクラスとして、という意味でしょうか?
名が「CollectionBase」なのは、「型を厳密にすべき」という意味が込められているのかもしれません。
何でも、となると「System.Collections.ArrayList」が使えますからね。
String なら「System.Collections.Specialized.StringCollection」ですね。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- ジブ
- 大ベテラン
- 会議室デビュー日: 2005/09/22
- 投稿数: 135
|
投稿日時: 2005-11-03 10:57
ちょっと私も勘違いしてたみたいです。
Arry.CreateInstanceは次元の設定のようでOptionBaseとかは関係ないみたいです。
コード: |
|
Dim nArray1 As Array = Array.CreateInstance(GetType(String), 3, 4)
nArray1(0, 0) = "hello!!"
MessageBox.Show(nArray1(0, 0))
nArray1(3, 0) = "hello!!" 'err
|
|
- ジブ
- 大ベテラン
- 会議室デビュー日: 2005/09/22
- 投稿数: 135
|
投稿日時: 2005-11-03 10:59
引用: |
|
じゃんぬねっとさんの書き込み (2005-11-03 10:41) より:
Microsoft.VisualBasic 名前空間がインポートされているからです。
(おそらく、ジブさんの場合はプロジェクト全体で)
|
うっとうしいのではずしちゃってもよいですかね??
ちょっと怖いかな??
ちょっと実験してみよう。
|