C Sharp에서 '친구' 키워드에 해당하는 것은 무엇입니까?
-
22-07-2019 - |
문제
C Sharp에서 '친구' 키워드에 해당하는 것은 무엇입니까?
'internal' 키워드는 어떻게 사용하나요?
C#에서는 'internal' 키워드가 'friend'를 대체한다는 내용을 읽었습니다.
소스 코드가 있는 C# 프로젝트에서 DLL을 사용하고 있지만 기존 코드를 수정하고 싶지 않습니다.나는 클래스를 상속받았으며 상속받은 클래스를 원하는 방식으로 사용할 수 있습니다.문제는 부모 클래스의 코드 대부분에 보호된 메서드가 있다는 것입니다.친구를 사용하면 어떻게든 이러한 보호된 메서드에 액세스하거나 호출할 수 있습니까?
해결책
키워드 액세스 수정자를 사용할 수 있습니다
internal
동일한 어셈블리에서만 코드에 액세스 할 수있는 유형 또는 유형 멤버를 선언합니다.당신은 사용할 수 있습니다
InternalsVisibleToAttribute
클래스가 정의되었습니다System.Rutime.CompilerServices
동일한 어셈블리 또는 지정된 어셈블리에서만 코드에 액세스 할 수있는 유형을 선언합니다.
당신은 당신이 다른 것을 사용하는 것처럼 첫 번째를 사용합니다 액세스 수정 자 ~와 같은 private
. 재치 :
internal class MyClass {
...
}
두 번째를 다음과 같이 사용합니다.
[assembly:InternalsVisibleTo("MyFriendAssembly", PublicKey="...")]
internal class MyVisibleClass {
...
}
이 두 가지 모두에 동등한 것으로 간주 될 수 있습니다. friend
C#에서.
방법 protected
파생 수업에서 이미 사용할 수 있습니다.
다른 팁
아니요, "내부"는 "친구"와 같지 않습니다 (적어도 C ++ '친구')
친구는이 클래스가 특정 클래스에서만 액세스 할 수 있음을 지정합니다.
내부는이 클래스가 어셈블리의 모든 클래스에서 액세스 할 수 있음을 지정합니다.
1) 내부 vb.net 'friend'키워드의 C# Equivent는 고려했듯이 (교체품과 대조)
2) 사용량은 다음과 같습니다
internal void Function() {}
internal Class Classname() {}
internal int myInt;
internal int MyProperty { get; set; }
3) 기본적으로, 내부로 표시된 클래스 / 함수 / vairible / 속성의 접근성이 마치 어셈블리에 공개 된 것처럼, 다른 어셈블리에 비공개 인 것처럼 규정하는 액세스 수정 자입니다.
서브 클래스는 상속받는 클래스의 보호 된 구성원에게 액세스 할 수 있습니다.
이 보호 된 회원들에게 다른 수업에 액세스 할 수 있습니까?
내부는 친구와 동일합니다.보호된 메서드는 동일한 클래스 내에서나 상속자에서만 사용할 수 있습니다.상속자로부터 보호된 메서드를 노출하려는 경우 해당 메서드를 공용 메서드로 래핑할 수 있습니다.