문제

C Sharp에서 '친구' 키워드에 해당하는 것은 무엇입니까?

'internal' 키워드는 어떻게 사용하나요?

C#에서는 'internal' 키워드가 'friend'를 대체한다는 내용을 읽었습니다.

소스 코드가 있는 C# 프로젝트에서 DLL을 사용하고 있지만 기존 코드를 수정하고 싶지 않습니다.나는 클래스를 상속받았으며 상속받은 클래스를 원하는 방식으로 사용할 수 있습니다.문제는 부모 클래스의 코드 대부분에 보호된 메서드가 있다는 것입니다.친구를 사용하면 어떻게든 이러한 보호된 메서드에 액세스하거나 호출할 수 있습니까?

도움이 되었습니까?

해결책

  1. 키워드 액세스 수정자를 사용할 수 있습니다 internal 동일한 어셈블리에서만 코드에 액세스 할 수있는 유형 또는 유형 멤버를 선언합니다.

  2. 당신은 사용할 수 있습니다 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 / 속성의 접근성이 마치 어셈블리에 공개 된 것처럼, 다른 어셈블리에 비공개 인 것처럼 규정하는 액세스 수정 자입니다.

서브 클래스는 상속받는 클래스의 보호 된 구성원에게 액세스 할 수 있습니다.

이 보호 된 회원들에게 다른 수업에 액세스 할 수 있습니까?

내부는 친구와 동일합니다.보호된 메서드는 동일한 클래스 내에서나 상속자에서만 사용할 수 있습니다.상속자로부터 보호된 메서드를 노출하려는 경우 해당 메서드를 공용 메서드로 래핑할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top