トップ回答者
mustinheritで宣言されたクラスでは

質問
-
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim obj(2) As SuperClass
obj(0) = New SubClassA
obj(1) = New SubClassB
obj(2) = New subClassCFor i As Integer = 0 To UBound(obj)
obj(i).disp()Next
End Sub
End Class上記のコードで「NEW SubClassA」の所に青い波線がついて、mustinheritで宣言されたクラスではNEWは使えませんと出ます。何が原因でしょうか。
galacoさんの答えの通りですがMstinheritを消すと、
Public Class SubClassC
Inherits SuperClass
Public Overridable Sub disp()
MessageBox.Show("商品名はGOODSです。")
End Sub
End Class「SubClassC」に青い波線でPublic mustoverride sub methodC()の継承'MustOverride'メンバーをオーバーライドしなければいけませんと出ます。どの様にしたらオーバーライドできますか。
- 編集済み bentensama 2014年5月11日 23:23
回答
-
継承にかかわる修飾子の理解が不足しているようなので、リンク先を読んでみてください。
- MustInherit
継承しなければならないクラス。不完全なクラスとも言えます。
不完全なクラスであるためインスタンスをつくることはできません。
完全なクラスにするには継承が必須です。 - Overridable
継承したクラスで上書き可能であるという宣言。 - Overrides
継承したクラスで上書きをするという宣言。
提示されているコードでは、SubClassA,B,CにもMustInheritがついているために継承が必要なクラスになっています。
インスタンス化(New)するにはMultInheritがついていてはいけません。Overridableは基底クラス(SuperClass)で1度宣言すれば十分です。
継承したクラスではOverridesで上書きします。
#SubClassAの実装は提示されていないので適当Public MustInherit Class SuperClass Public Overridable Sub Disp() MessageBox.Show("商品名は登録されていません") End Sub End Class Public Class SubClassA 'MustInheritをつけたらインスタンスを作れない(Newできない) Inherits SuperClass Public Overrides Sub Disp() 'OverridableではなくOverrides MessageBox.Show("商品名は******です。") End Sub End Class Public Class SubClassB 'MustInheritをつけたらインスタンスを作れない(Newできない) Inherits SuperClass Public Overrides Sub Disp() 'OverridableではなくOverrides MessageBox.Show("商品名はMANUFACTURです。") End Sub End Class Public Class SubClassC 'MustInheritをつけたらインスタンスを作れない(Newできない) Inherits SuperClass Public Overrides Sub Disp() 'OverridableではなくOverrides MessageBox.Show("商品名はGOODSです。") End Sub End Class Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim obj(2) As SuperClass obj(0) = New SubClassA obj(1) = New SubClassB obj(2) = New SubClassC For i As Integer = 0 To UBound(obj) obj(i).Disp() Next End Sub End Class
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 編集済み gekkaMVP 2014年5月13日 17:46
- 回答としてマーク bentensama 2014年5月14日 3:41
- MustInherit
すべての返信
-
> どの様にしたらオーバーライドできますか。
エラーメッセージの中のキーワードでググってみることをお勧めします。
例えば MustOverride でググってみてください。ここ(限られたことしか書けない掲示板の意)で説明を受けるよりよく分かる記事が多々見つかると思います。例えば下記のページ。
プロフェッショナルVB.NETプログラミング
第10回 オブジェクト関連(後編)
http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet10/vb6tonet10_03.html#ご自分の環境(OS, .NET, Visual Studio のバージョンなど)を書くようにしてください。
#回答に対するレスや追加質問は、最初の質問を編集して追記しないで、その回答に対する「返信」として書いてください。最初の質問を編集されると、あとから読む人は訳がわからなくなります。
- 編集済み SurferOnWww 2014年5月12日 4:33 一部修正
-
MustinheritをsudClassA~Cにつけて、 obj(0) = New SubClassA
NEWの代わりにクラスからインスタンスを、 obj(1) = New SubClassB
生成する演算子はありませんか。 obj(2) = New subClassC
- 編集済み bentensama 2014年5月12日 19:47
-
Public MustInherit Class SuperClass
Public Overridable Sub Disp()
MessageBox.Show("商品名は登録されていません")End Sub
End Class
Public MustInherit Class SubClassB
Inherits SuperClass
Public Overridable Sub Disp()
MessageBox.Show("商品名はMANUFACTURです。")
End SubEnd Class
Public Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim obj(2) As SuperClass
obj(0) = New SubClassA
obj(1) = New SubClassB
obj(2) = New subClassCFor i As Integer = 0 To UBound(obj)
obj(i).Disp()Next
End Sub
End Classと記述すると、SubClassA~Cにおいて青い波線が表示され、'Mustinherits'で宣言されたクラスでは、NEWを使用することはできません、と出ます。この場合どのようにしたらよいのでしょうか。
-
継承にかかわる修飾子の理解が不足しているようなので、リンク先を読んでみてください。
- MustInherit
継承しなければならないクラス。不完全なクラスとも言えます。
不完全なクラスであるためインスタンスをつくることはできません。
完全なクラスにするには継承が必須です。 - Overridable
継承したクラスで上書き可能であるという宣言。 - Overrides
継承したクラスで上書きをするという宣言。
提示されているコードでは、SubClassA,B,CにもMustInheritがついているために継承が必要なクラスになっています。
インスタンス化(New)するにはMultInheritがついていてはいけません。Overridableは基底クラス(SuperClass)で1度宣言すれば十分です。
継承したクラスではOverridesで上書きします。
#SubClassAの実装は提示されていないので適当Public MustInherit Class SuperClass Public Overridable Sub Disp() MessageBox.Show("商品名は登録されていません") End Sub End Class Public Class SubClassA 'MustInheritをつけたらインスタンスを作れない(Newできない) Inherits SuperClass Public Overrides Sub Disp() 'OverridableではなくOverrides MessageBox.Show("商品名は******です。") End Sub End Class Public Class SubClassB 'MustInheritをつけたらインスタンスを作れない(Newできない) Inherits SuperClass Public Overrides Sub Disp() 'OverridableではなくOverrides MessageBox.Show("商品名はMANUFACTURです。") End Sub End Class Public Class SubClassC 'MustInheritをつけたらインスタンスを作れない(Newできない) Inherits SuperClass Public Overrides Sub Disp() 'OverridableではなくOverrides MessageBox.Show("商品名はGOODSです。") End Sub End Class Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim obj(2) As SuperClass obj(0) = New SubClassA obj(1) = New SubClassB obj(2) = New SubClassC For i As Integer = 0 To UBound(obj) obj(i).Disp() Next End Sub End Class
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 編集済み gekkaMVP 2014年5月13日 17:46
- 回答としてマーク bentensama 2014年5月14日 3:41
- MustInherit