수색…


클래스 정의하기

수업 은 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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow