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
Me 대 MyClass
나 현재 개체 인스턴스를 사용합니다.
MyClass 는 멤버가 호출 된 클래스의 memberdefinition을 사용합니다.
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