2011-03-16 9 views
2

메서드의 주소를 참조 할 때 재정의를 고려해야합니까?기본 클래스의 AddressOf

Class B 
    Inherits A 

    Overrides Sub Foo 
    Console.WriteLine("B") 
    End Sub 
End Class 


Class A 
    Public Sub PFoo 
    ... AddressOf Foo ... ' WHAT WILL DO THIS METHOD??? ' 
    End 

    Protected Overridable Sub Foo() 
    Console.WriteLine("A") 
    End Sub 
End Class 
+1

이 테스트는 단지 테스트 할 수 있습니다. ;-) –

답변

3

B가 인쇄됩니다. 의도가 무엇인지 명확히하기 위해 AddressOf Me.Foo를 넣을 수 있습니다. 또한 FYI와 마찬가지로 MyClass.Foo를 넣으면 A가 출력됩니다.

Module Module1 

    Sub Main() 

     Dim b As B = New B 
     b.PFoo() ' prints B 
     Console.ReadLine() 

    End Sub 

End Module 

Public Class B 
    Inherits A 

    Protected Overrides Sub Foo() 
     Console.WriteLine("B") 
    End Sub 
End Class 

Public Class A 
    Public Sub PFoo() 
     Dim f As Action = New Action(AddressOf Me.Foo) 
     f.Invoke() 
    End Sub 

    Protected Overridable Sub Foo() 
     Console.WriteLine("A") 
    End Sub 
End Class 
+0

그리고 나를두면 어떨까요? 하지만 'MyClass.Foo' ...? – serhio

+1

Me.Foo 대신 MyClass.Foo를 입력하면 클래스 A의 메서드에 주소를 제공합니다. 클래스 계층 구조에서 MyClass는 클래스가 사용되는 클래스를 참조합니다. 예를 들어 클래스 A의 MyClass.Foo를 사용하면 클래스 A의 Foo 메서드를 참조합니다. 그러나 클래스 계층에서 Me.Foo를 사용하면 Foo 메서드를 재정의하는 파생 클래스가 검색됩니다. 아무 것도 찾을 수 없으면 A 클래스의 Foo 메서드를 호출합니다. 따라서이 클래스에서는 클래스 B가 Foo를 재정의하므로 클래스 A가 Me.Foo를 호출 할 때 클래스 B가 호출됩니다. –

2

나는 PFoo가 PFoo가 상속 B 클래스의/객체 인스턴스 내에서 호출되면, 상속 클래스에서 재정의되는 푸를 참조 할 것이라고 믿는다.

+0

즉,'bInstance.PFoo()'를 호출하면'B'가 출력됩니까? – serhio

+0

의사 코드 가정, 예. – Kon

관련 문제