2011-04-21 2 views
2

최근에 VB.Net의 액세스 한정자에 대해 읽었으며 실제로 이해할 수없는 내용이 있습니다. Class (또는 Module) 둘러싸는 블록의 수식어를 상속합니까? "Public Friend"vs "Friend Friend"

Friend Class Bla 
    Public Sub Foo 
    (...) 
End Class 

가 다르게 Foo가 친구로 설정되어있는 경우에 비해 행동 하는가 :

예를 들어, 공용 방법 Foo으로, 어셈블리에 Friend 클래스 Bla이 있다고 가정? 그렇다면 어떤 조언을합니까?

Friend Class Bla 
    Friend Sub Foo 
    (...) 
End Class 

고마워요!

+1

제목에 두 번째 코드 블록이 Public Class Bla 및 Friend Sub Foo 여야한다고 제안되어 있지 않습니까? –

+2

이 게시물을 확인하십시오 : http://stackoverflow.com/questions/5652564/please-explain-behavior-when-class-and-member-have-different-access/5655177#5655177 –

답변

1

public 또는 FriendFoo으로 지정했는지는 중요하지 않습니다.이 클래스는이 어셈블리에서만 사용할 수 있기 때문에 중요합니다.

메소드/속성의 액세스 한정자를 클래스의 액세스 한정자로 제한 할 수 있습니다. 귀하의 예제에서 메서드 Foo은 비공개가 될 수 있습니다. 즉, 동일한 어셈블리의 다른 클래스를 포함하여 호출자가 메서드를 사용할 수 없음을 의미합니다.

클래스/인스턴스를 통해 메소드에 액세스 할 수 있습니다. 클래스가 private 인 경우 public 메서드는 무엇입니까?

편집 : 사이드 노트에서 Bla의 인스턴스를 호출자 (다른 어셈블리에 있음)에게 반환 할 수 있습니다. 이 경우 Foopublic으로 선언 된 경우 호출자는 public 메서드를 호출 할 수 있어야합니다. 이것은 내 가정이다.

+0

이 답변을 주셔서 감사합니다! 물론 private 클래스를 사용하는 public 메서드는 거의 이해가 안 될 것입니다. (최소한 내가 아는 것은 아닙니다.) –

+0

@shahkalpesh : 'Bla'인스턴스가 다른 어셈블리에 전달 될 수 없습니다. 'Friend' 수정자가 있습니다. 이것을 성취하는 가장 좋은 방법은 반성을 통한 것입니다. –

1

누군가가 Bla에 액세스해야하는 반사 농구대를 뛰어 넘는 경우 다시 전화 할 때 Public Sub Foo을 호출 할 필요가 없지만 Friend Sub Foo을 호출하면됩니다.