No.2ベストアンサー
- 回答日時:
> 1.コンストラクタについて
> インスタンスを生成したら、コンストラクタが自動的に呼び出される。
> しかし、この回答ではコンストラクタを記述していないので何もされずにインスタンスが生成される。
> こういう解釈でいいですか?
はい。大丈夫だと思います。
> 2.デリゲートについて
> メソッドのオーバーライドは引数が異なる必要があるが、デリゲートは、引数が同じ必要がある。
デリゲートとオーバーロードがごっちゃになってませんか?
■オーバーライド
基底クラスのメソッドやプロパティを派生クラスで塗り替える。ゆえに、引数の数・型と、戻り値の型は同じでなければならない。
■オーバーロード
同じ名前のメソッドやプロパティを異なる引数・戻り値を持つメソッド・プロパティとして定義する。
■デリゲート
呼び出すメソッドやプロパティを動的に定義するための仕組み。あるメソッドを呼び出す場合、デリゲート宣言ではその引数・戻り値を一致させる必要がある。
以下に、この3つを詰め込んだコードを載せておきます。
' 基底クラス KiteiA
Public Class KiteiA
' オーバーライド可能な関数の定義
Public Overridable Function Hoge(ByVal Value As Integer) As String
Return Value.ToString()
End Function
' Hoge関数を呼び出すためのデリゲート宣言
' ※引数・戻り値の型は同じでなければならない
Public Delegate Function HogeCall(ByVal Value As Integer) As String
End Class
' 派生クラス HaseiA
Public Class HaseiA
' 基底クラス KiteiA を継承
Inherits KiteiA
' 基底クラス KiteiAのHoge関数をオーバーライド
' ※関数名・引数・戻り値の型は同じでなければならない
Public Overrides Function Hoge(ByVal Value As Integer) As String
Return Value.ToString & "[32bit値]"
End Function
' 基底クラス KiteiAのHoge関数に対しオーバーロードを追加
' ※引数・戻り値の型は異なっても構わない
Public Overloads Function Hoge(ByVal Value As Short) As String
Return Value.ToString & "[16bit値]"
End Function
End Class
' メインクラス
Public Class Main
' ここからスタート
Public Sub Main()
' 派生クラス HaseiA のインスタンスを作成
Dim clsA As New HaseiA
' オーバーライドされたHogeを呼び出す
Call Console.WriteLine(clsA.Hoge(123I))
' オーバーロードのHogeを呼び出す
Call Console.WriteLine(clsA.Hoge(123S))
' Hogeを呼び出すためのデリゲートを定義
' 呼び出すのは、clsAのHoge関数
Dim dgtHoge As New KiteiA.HogeCall(AddressOf clsA.Hoge)
' デリゲートを使ってHogeを呼び出す
Call Console.WriteLine(dgtHoge.Invoke(123I))
End Sub
End Class
上記を実行すると
123[32bit値]
123[16bit値]
123[32bit値]
という出力が得られます。
ありがとうございます。
コンストラクタは理解できました。
>メソッドのオーバーライドは引数が異なる必要があるが、
オーバーライドではなく、オーバーロードでした。
オーバーロードは同じメソッド名で引数・戻り値が違うため動作が動的に変えられるので大変重宝しそうです。
その点、オーバーライド・デリゲートはメソッド自体の機能を変えてしまいます。
なら、最初からその機能を持ったメソッドを作ってしまえばいいじゃないかと考えてしまうわけです。
オーバーライド・デリゲートは理解するのが難しいです。
使いどころがわからないので、使う機会がなく、理解が一向に進みません。
もうちょっと本を何往復かして考えます。
大変ありがとうございましたmm
No.1
- 回答日時:
クラスのインスタンスを作成した時に呼び出されるのが「コンストラクタ」です。
例えば・・・
Dim clsA As ClassA ← ここはclsAを宣言しただけ。
clsA = New ClassA ← ここでインスタンスが作成され、ClassAのコンストラクタが呼び出される。
Dim clsA As New ClassA
とすると、clsAの宣言と同時にインスタンスが作成され、コンストラクタが呼び出されます。
デリゲートは、Cで言うところの関数ポインタの役割を果たします。
クラスからメソッドを呼び出すことは、単に「メソッドの呼び出し」と言うかと・・・。
デリゲートについては検索すれば解説&サンプルがあるのでそちらをご覧になるとよいと思います。
参考URL:http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbne …
ありがとうございます。
1.コンストラクタについて
インスタンスを生成したら、コンストラクタが自動的に呼び出される。
しかし、この回答ではコンストラクタを記述していないので何もされずにインスタンスが生成される。
こういう解釈でいいですか?
2.デリゲートについて
メソッドのオーバーライドは引数が異なる必要があるが、デリゲートは、引数が同じ必要がある。
そしてオーバーライド・デリゲートが異なる処理を実行することができる。
という解釈でいいですか?
解釈を間違えていたら指摘してくださいmm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
- Visual Basic(VBA) セルS2に入力した「月」と一致したB列の右隣へセルS110の値を転記する下記マクロを実行するとエラー 2 2022/12/06 17:32
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 2 2023/03/02 18:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
コンポーネント指向って、どの...
-
VB6で外部から静的アクセスが可...
-
WPFでCanvas の子要素にアクセ...
-
用語の意味の違いを教えてくだ...
-
他のモジュールのプロシージャ...
-
Mapに登録した値を登録した順に...
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
ユーザーフォームを表示中にシ...
-
VBA(エクセル)で自動的にボタン...
-
【C#/Java?】try-catchでcatch...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 438になった時の...
-
エクセルエラー13型が一致しま...
-
エクセルのVBAの標準モジュール...
-
ユーザーフォームのテキストボ...
-
クリックイベントなのに、2回ク...
-
フォームの再読み込み
-
ウォッチ式の文字数制限について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共通モジュールでDBへの接続と...
-
[VBA] Classから他のClassを呼...
-
Excel vbaで複数のテキストボッ...
-
用語の意味の違いを教えてくだ...
-
他のモジュールのプロシージャ...
-
VB.netで、動的な型変換を行い...
-
WPFでCanvas の子要素にアクセ...
-
VB.NETにて文字列で指定した関...
-
【JSF】バッキングビーンから別...
-
バウンドプロパティとは?
-
VBAで、Functionを、クラスモジュール...
-
VBA オブジェクト追加
-
Form2の変数をForm1に渡す方法...
-
コンポーネント指向って、どの...
-
VBA クラスにプロパティが実装...
-
シーケンス図について。
-
VBA モジュールレベル・パブリ...
-
worksheetFunctionクラスのVloo...
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
おすすめ情報