New インスタンス化とは

タグの編集
投稿者 taka  (社会人) 投稿日時 2019/12/27 21:27:46
VBプログラミング初心者です。

 New インスタンス化の理解度についてですが何となく解る様なそうじゃないようなふわふわしています。自分の解釈はいいと思われますか?


「参考書引用」
・インスタンス(クラスを基にした実際の値としてのデータ)を生成することである。

・インスタンスとは元になるオブジェクトから作成されたコピーのことである。
     インスタンスは次のようにオブジェクトの宣言時にNewを指定します。これでForm1のインスタンスが生成されます
   Dim f As New Form1()
このフォームインスタンスを表示するには次のようにします。
   f.Show()

・クラスには、フォームやコントロールのほかに、イメージの描画やデータベース操作、印刷処理など形として見えないクラスもあります。これらのクラスはコードから利用します。このとき、実体化と呼ぶ手続きを行ってから利用します。
 フォームやコントロールも実体化が必要ですが、フォームやコントロールの実体化の手続きは自動的に行われています。例えば、第3章ではツールボックスの[PictureBox]をクリックしてパネルの上に配置しましたが、これは配置した時に実体化の手続きが自動的に作成されているのです。


 四半世紀前の稚拙な頭と記憶を掘り起こした、ここで今の自分の解釈は

・「クラスとは設計図」 「インスタンスとは。。。設計図からなる実際の.exeバイナリコード?Staticメモリ割り当て(コンパイル時におのおのに対して相当のコード、領域を割り当てること?プリプロセッサ?に対した1種の命令?、、、、

・「自動的に作成されているのです。」のくだりですが、
これは「VS」の仕事によるものですね?この辺りの解釈は例えばフォームコントロールであればフォーム上に張り付けると裏側でNewされている。

どうなんでしょう?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2019/12/28 00:03:50
インタンスについて学ぶ際には、「クラス(参照型)」と「構造体(値型)」の違いについても、
あわせて学んでおきましょう。


> コンパイル時におのおのに対して相当のコード、領域を割り当てること?プリプロセッサ?に対した1種の命令?、、、、

VB におけるプリプロセッサの例としては、『#If ディレクティブ』等が挙げられますが、
クラスやインスタンスの話とは無関係ですね。
クラスやインスタンスの説明にはなっていないと思います。


> この辺りの解釈は例えばフォームコントロールであればフォーム上に張り付けると裏側でNewされている。

これについてはその通りですね。


たとえば Form1 に Button を貼り付けると、Form1.designer.vb というファイルが作られて、
その中に下記のようなコードが自動生成されることになります。

Private Sub InitializeComponent()
    Me.Button1 = New System.Windows.Forms.Button()    '★ Button のインタンスを生成している 
    
    'Button1 
    
    Me.Button1.Location = New System.Drawing.Point(10, 10)
    Me.Button1.Name = "Button1"
    Me.Button1.Size = New System.Drawing.Size(100, 40)
    Me.Button1.Text = "Button1"
    Me.Button1.UseVisualStyleBackColor = True
    
    'Form1 
    
    Me.Controls.Add(Me.PictureBox1)
    Me.Name = "Form1"
    Me.Text = "Form1"
End Sub
Friend WithEvents Button1 As Button



ツールボックスにある Button クラスは設計図。

設計図から New によって生成され、その実体が
フィールド変数 Button1 にセットされたのが、上記の★の行のコード。

Button という設計図は同じでも、そこから作られた Button1 と Button2 は別の存在です。
それぞれ別のインスタンス。
投稿者 taka  (社会人) 投稿日時 2019/12/28 18:54:00
魔界の仮面弁士さまご返信ありがとうございます。

ソリューションエクスプローラーにてForm1.Desighner.vbを覗いてみました。
ずらりとコントロールがNewされていました。またそこでおのおのプロパティ設定もしていますね。

 最初に張り付けたコントロールがリスト上の上に、最後に張り付けたものは下行になっていますね。Controls(#)からの参照は下行から紐づいている。また、#index紐づけ時に優先順位があるみたい。

また、色々勉強します。