tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルインスタンスについて
記事No9480
投稿日: 2009/10/19(Mon) 16:53
投稿者tecc
.NET暦は浅いです。
http://hanatyan.sakura.ne.jp/ この質問からの派生です。

A  Dim i As Integer = 5
    Dim item() As ToolStripMenuItem
  item(i) = New ToolStripMenuItem

B  Dim i AS Integer = 5
  Dim item() As ToolStripMenuItem = New ToolStripMenuItem(5) {}


AとBは、コードは違えど意味は一緒ではないですか?
一緒ではなければ、その違いを恐縮ですが教えて下さい。

[ツリー表示へ]
タイトルRe: インスタンスについて
記事No9481
投稿日: 2009/10/19(Mon) 18:18
投稿者魔界の仮面弁士
> AとBは、コードは違えど意味は一緒ではないですか?
いえ、違います。


> A  Dim i As Integer = 5
>     Dim item() As ToolStripMenuItem
>   item(i) = New ToolStripMenuItem
2 行目では、1次元配列を作成していますが、この変数は Nothing です。
item(i) にはアクセスできないため、3 行目の代入処理はエラーとなるでしょう。

item(i) に ToolStripMenuItem を代入する前に、
item へ配列インスタンスを代入するか、もしくは
ReDim ステートメントを呼び出す必要があります。


> B  Dim i AS Integer = 5
>   Dim item() As ToolStripMenuItem = New ToolStripMenuItem(5) {}
この場合、先ほどとは異なり、変数 item は Nothing では無く、
item(0) などの要素を持った 1 次元配列となります。
ただし、item(0) や item(2) などの各要素は、初期値 Nothing のままなので、
やはりこの後には、item(i) に ToolStripMenuItem を代入する必要があるでしょう。

[ツリー表示へ]
タイトルRe^2: インスタンスについて
記事No9482
投稿日: 2009/10/20(Tue) 10:06
投稿者tecc
Dim item() As ToolStripMenuItem = New ToolStripMenuItem(5) {}

この時点で、item()の配列が全て初期化されNothingではなくなるのかと
思っていました。

なぜなら、= New ToolStripMenuItem(5) {} の要素数を明確的に指定した
場合は全て代入されると勝手に憶測していました。

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

[ツリー表示へ]