Visual Basic .NET Language
OOPキーワード
サーチ…
クラスの定義
クラスはOOPの重要な側面です。クラスはオブジェクトの "青写真"のようなものです。オブジェクトにはクラスのプロパティがありますが、その特性はクラス自体で定義されていません。それぞれのオブジェクトは異なる可能性があるため、独自の特性を定義します。
Public Class Person
End Class
Public Class Customer
End Class
クラスにはサブクラスも含めることができます。サブクラスは、その親クラスと同じプロパティおよびビヘイビアを継承しますが、独自のプロパティおよびクラスを持つことができます。
継承修飾子(クラス上)
継承する
ベース(または親)クラスを指定します。
Public Class Person
End Class
Public Class Customer
Inherits Person
End Class
'One line notation
Public Class Student : Inherits Person
End Class
考えられるオブジェクト:
Dim p As New Person
Dim c As New Customer
Dim s As New Student
NotInheritable
プログラマがクラスを基本クラスとして使用できないようにします。
Public NotInheritable Class Person
End Class
考えられるオブジェクト:
Dim p As New Person
MustInherit
クラスを基本クラスとしてのみ使用することを指定します。 (抽象クラス)
Public MustInherit Class Person
End Class
Public Class Customer
Inherits Person
End Class
考えられるオブジェクト:
Dim c As New Customer
継承修飾子(プロパティとメソッド)
オーバーライド可能
クラスのプロパティまたはメソッドを派生クラスでオーバーライドできるようにします。
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
オーバーライド
基本クラスで定義されているオーバーライド可能なプロパティまたはメソッドをオーバーライドします。
Public Class Customer
Inherits Person
'Base Class must be Overridable
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
NotOverridable
継承するクラスでプロパティまたはメソッドがオーバーライドされないようにします。デフォルトの動作。 オーバーライドメソッドでのみ宣言できます
Public Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Public Class Customer
Inherits Person
Public NotOverridable Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
Public Class DetailedCustomer
Inherits Customer
'DoSomething can't be overridden
End Class
使用例:
Dim p As New Person
p.DoSomething()
Dim c As New Customer
c.DoSomething()
Dim d As New DetailedCustomer
d.DoSomething()
出力:
Person
Customer
Customer
MustOverride
派生クラスがプロパティまたはメソッドをオーバーライドする必要があります。
MustOverrideメソッドは、 MustInheritクラスで宣言する必要があります。
Public MustInherit Class Person
Public MustOverride Sub DoSomething()
'No method definition here
End Class
Public Class Customer
Inherits Person
'DoSomething must be overridden
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
使用例:
Dim c As New Customer
c.DoSomething()
出力:
Customer
MyBase
MyBaseキーワードは、クラスの現在のインスタンスの基本クラスを参照するオブジェクト変数のように動作します。
Public Class Person
Public Sub DoSomething()
Console.WriteLine("Person")
End Sub
End Class
Public Class Customer
Inherits Person
Public Sub DoSomethingElse()
MyBase.DoSomething()
End Sub
End Class
使用例:
Dim p As New Person
p.DoSomething()
Console.WriteLine("----")
Dim c As New Customer
c.DoSomething()
c.DoSomethingElse()
出力:
Person
----
Person
Person
私とMyClass
Meは現在のオブジェクトインスタンスを使用します。
MyClassは、メンバーが呼び出されたクラスのメンバー定義を使用します
Class Person
Public Overridable Sub DoSomething()
Console.WriteLine("Person")
End Sub
Public Sub useMe()
Me.DoSomething()
End Sub
Public Sub useMyClass()
MyClass.DoSomething()
End Sub
End Class
Class Customer
Inherits Person
Public Overrides Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
使用例:
Dim c As New Customer
c.useMe()
c.useMyClass()
出力:
Customer
Person
オーバーロード
オーバーロードとは、同じ名前で異なる引数型を持つクラス内に、複数のプロシージャ、インスタンスコンストラクタ、またはプロパティを作成することです。
Class Person
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
End Class
影
上書きできないメンバーを再宣言します。インスタンスへの呼び出しだけが影響を受けます。基本クラス内のコードはこれによって影響を受けません。
Public Class Person
Public Sub DoSomething()
Console.WriteLine("Person")
End Sub
Public Sub UseMe()
Me.DoSomething()
End Sub
End Class
Public Class Customer
Inherits Person
Public Shadows Sub DoSomething()
Console.WriteLine("Customer")
End Sub
End Class
使用例:
Dim p As New Person
Dim c As New Customer
p.UseMe()
c.UseMe()
Console.WriteLine("----")
p.DoSomething()
c.DoSomething()
出力:
Person
Person
----
Person
Customer
落とし穴 :
例1、ジェネリックで新しいオブジェクトを作成するどの機能が使用されますか?
Public Sub CreateAndDoSomething(Of T As {Person, New})()
Dim obj As New T
obj.DoSomething()
End Sub
使用例:
Dim p As New Person
p.DoSomething()
Dim s As New Student
s.DoSomething()
Console.WriteLine("----")
CreateAndDoSomething(Of Person)()
CreateAndDoSomething(Of Student)()
出力:直感的には、結果は同じでなければなりません。しかしそれは真実ではありません。
Person
Student
----
Person
Person
例2:
Dim p As Person
Dim s As New Student
p = s
p.DoSomething()
s.DoSomething()
出力:直感では、pとsが等しく、等しくなると考えることができます。しかしそれは真実ではありません。
Person
Student
この簡単な例では、Shadowsの奇妙な振る舞いを学ぶのは簡単です。しかし、実際には、それは驚きをたくさんもたらします。影の使用を防ぐことが望ましいです。可能な限り他の選択肢を使用する必要があります(上書きなど)。
インターフェイス
Public Interface IPerson
Sub DoSomething()
End Interface
Public Class Customer
Implements IPerson
Public Sub DoSomething() Implements IPerson.DoSomething
Console.WriteLine("Customer")
End Sub
End Class