내부 클래스의 공용 및 내부 멤버?
좋아, 약간 어리석은 질문 일 수 있고 분명한 대답이 여기에서 미묘한 부분을 있는지 궁금했습니다.
클래스 에서 선언 된 멤버 와 클래스 public
에서 선언 된 멤버 가시성 / 사용성에서 차이가가 있습니까?internal
internal
internal
즉 사이
internal class Foo
{
public void Bar()
{
}
}
과
internal class Foo
{
internal void Bar()
{
}
}
메서드를 public
및 선언 한 virtual
다음 파생 클래스 인에서 재정의 한 public
경우 수정 튼튼하게 사용하는 이유는 분명합니다. 그러나 이것이 유일한 상황입니까?
이 경우를 고려하십시오.
public interface IBar { void Bar(); }
internal class C : IBar
{
public void Bar() { }
}
여기서 C.Bar는 내부로 표시 할 수 없습니다. 이렇게하면 D.GetBar () 호출자가 C.Bar에 액세스 할 수 있으므로 오류가 발생합니다.
public class D
{
public static IBar GetBar() { return new C(); }
}
public
멤버는 여전히 internal
때의 internal
클래스입니다.
MSDN에서 :
멤버의 액세스 가능성은 포함 된 유형의 액세스 가능성보다 클 수 없습니다. 예를 들어 내부 형식으로 선언 된 공용 메서드는 내부 접근성 만 있습니다.
이런 식으로 생각하면 public
속성에 액세스 할 수 있습니다 ....? 내가 볼 수없는 수업? :)
이 경우 Eric의 대답은 매우 중요합니다. 인터페이스를 통해 노출되고 직접적으로 영향을 주지 않는 경우 , 상대하는 구성원과 그 상황에있는 경우에만 있습니다.
WPF의 XAML에서 사용할 때 둘 사이 에 차이점이있는 또 다른 예가 있습니다.
XAML :
<Button Tag="{x:Static vm:Foo+Bar.e1}" />
internal
열거 형 코드가 등장합니다.
internal class Foo
{
internal enum Bar
{
e1,
e2,
}
}
그러나 놀랍게도 변경하면 public
오류가 발생합니다.
internal class Foo
{
public enum Bar
{
e1,
e2,
}
}
마지막 예에서는 발생합니다.
MC3064 : 공개 또는 내부 클래스 만 마크 업 내에서 사용할 수 있습니다. 'Bar'유형은 공개 또는 내부가 아닙니다.
안타깝게도이 경우 잘못 설명 할 수 없습니다 public
. 내 추측은 "WPF가 그렇게 작동하기 때문에"입니다. 중첩 된 클래스의 수정 유효성을 변경 internal
하여 오류를 제거하십시오.
public
의 멤버 internal
클래스를 재정의 할 수 있습니다. public
회원 public
조금 더하면 간접적으로 ... 노출 될 수 있으므로 기본 클래스를 사용합니다.
반영에있는 회원이 공개되어 있는지 여부가 중요합니다.
예를 들어 중첩 된 개인 클래스를 WPF 바인딩에 전달할 수도 있으며 바인딩은 평소와 같이 공용 속성에 대해 작동합니다.
참고 URL : https://stackoverflow.com/questions/2564215/public-and-internal-members-in-an-internal-class
'ProgramingTip' 카테고리의 다른 글
JSTL jar는 어디에서 다운로드 할 수 있습니까? (0) | 2020.12.01 |
---|---|
ID, 클래스 및 요소 유형 접두사를 포함하는 HTML 명명 규칙? (0) | 2020.12.01 |
기본 키와 ID의 차이점은 무엇입니까? (0) | 2020.12.01 |
iPad 레이아웃은 세로에서 가로로 회전 할 때 확대됩니다. (0) | 2020.12.01 |
입력이 일치하지 않을 때 grep이 오류를 반환하지 않습니다. (0) | 2020.12.01 |