내부 대 개인 액세스 수정 자


답변:


516

내부의 은 어셈블리 범위를위한 것입니다 (예 : 동일한 .exe 또는 .dll의 코드에서만 액세스 가능)

private 은 클래스 범위를위한 것입니다 (즉, 같은 클래스의 코드에서만 액세스 가능).


6
나는 빠른 질문이있다; 어셈블리 내의 네임 스페이스에서 클래스를 내부 클래스 인 클래스로 선언하면 두 경우 모두 어셈블리 내의 해당 클래스에 액세스 할 수 있습니다. 개인 클래스와 내부 클래스의 차이점은 무엇입니까? 또는 클래스 내에서 클래스를 중첩 할 때 사용되는 클래스 측면에서 개인 및 내부 수정자가 있습니까?
mayotic

2
특정 프로젝트 / 어셈블리를 다른 프로젝트의 참조로 추가했으며 개인뿐만 아니라 내부 모두 네임 스페이스 내 에서이 특정 클래스에 액세스 할 수 없으므로 개인 클래스와 내부 클래스의 차이점은 무엇입니까? 감사
mayotic

9
최상위 클래스를 비공개로 선언 할 수 없습니다. 컴파일러가 당신을 막을 것입니다.
TheGateKeeper

6
@NetSkay : 공개 클래스 내에서 개인 클래스를 선언하면 어셈블리의 다른 클래스 에서이 클래스에 액세스 할 수 없지만이 클래스를 내부 클래스로 선언하면 어셈블리에서 액세스 할 수 있습니다. 그러나 둘 다 어셈블리 외부에서 액세스 할 수는 없습니다.
Yogesh Jindal

2
VB.NET 배경에서 오는 경우 C #의 "내부"키워드는 VB.NET의 "친구"키워드와 같습니다.
Brain2000

207

아래에서 설명을 찾으십시오. 자세한 내용은이 링크를 확인하십시오-http: //www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html

은밀한: -개인 회원은 자신의 유형 (자체 클래스) 내에서만 액세스 할 수 있습니다.

내부 : -내부 멤버는 상속 (파생 유형) 또는 클래스 인스턴스를 통해 어셈블리 내에서만 액세스 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

참고 :

dotnetbull-C #의 액세스 수정 자란 무엇입니까


17
Protected Internal보다 더 넓은 액세스 를 제공하는 흥미로운 기능입니다 Protected.
Dan Bechard

9
@ Dan, 철저히 동의합니다. 읽는 것이 도움이 될 그리고 생각 protected internal으로 protected OR internal.
chessofnerd

7
무슨 With Type뜻입니까?
James Wierzba

@Dan 그래, 나는 그것이 진리 테이블과 AND그 행렬을 true | false | false | false 로 행동한다고 ​​가정했다 protected internal. 직관적이지 않습니다. 대신 true | true | true | false OR'd입니다.
무비 철

1
덧붙여서 C # 7.2는 "protected AND internal"수정자를 추가했지만 선택한 실제 키워드 private protected는 그다지 직관적이지 않습니다. 자세한 내용 : docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Joe Sewell

70

internal멤버는 선언 된 어셈블리의 모든 코드에서 볼 수 있습니다
(및 [InternalsVisibleTo]속성을 사용하여 참조 된 다른 어셈블리 )

private멤버는 선언 클래스에만 표시됩니다. (중첩 클래스 포함)

외부 (중첩되지 않은) 클래스는 private전용으로 만들 범위가 없으므로 선언 할 수 없습니다 .

잊어 버린 질문에 대답하기 위해 protected 멤버는 private멤버와 비슷하지만 선언 유형을 상속하는 모든 클래스에서도 볼 수 있습니다. (그러나 적어도 현재 클래스 유형의 표현식에서만)



6

비공개 멤버는 클래스 본문 또는 선언 된 구조체 내에서만 액세스 할 수 있습니다.

내부 유형 또는 멤버는 동일한 어셈블리의 파일 내에서만 액세스 할 수 있습니다


이것을 사용하는 것의 차이점은 무엇입니까? 난 여전히 그것을 얻을 해달라고 : X
deadfish

4
개인은 클래스 내에서만 액세스 할 수 있으며 내부는 어셈블리 내에서 액세스 할 수 있습니다 (VS dll / exe 파일의 프로젝트).
Jesper Fyhr Knudsen

3

Internal을 사용하면 여러 비즈니스 로직 클래스간에 데이터 액세스 정적 클래스 (스레드 안전성을 위해)를 참조하면서 연결 풀에서 서로 클래스 / 트립을 상속하도록 상속하지 않고 궁극적으로 DAL 클래스를 허용하지 않도록 할 수 있습니다. 공공 수준에서 액세스를 촉진합니다. 이것은 디자인과 모범 사례에서 수많은지지를 가지고 있습니다.

Entity Framework는 이러한 유형의 액세스를 잘 활용합니다.


0

내부 멤버는 어셈블리 내에서 액세스 가능 (동일한 프로젝트에서만 액세스 가능)

개인 회원은 같은 클래스에서 액세스 할 수 있습니다

초보자를위한 예

솔루션에는 두 개의 프로젝트 (Project1, Project2)가 있으며 Project1에는 Project2에 대한 참조가 있습니다.

  • Project2로 작성된 공개 방법은 Project2 및 Project1에서 액세스 할 수 있습니다.
  • Project2로 작성된 내부 메소드는 Project1에서만 액세스 가능하지만 Project1에서는 액세스 할 수 없습니다.
  • Project2의 클래스 1로 작성된 개인 메소드는 동일한 클래스에만 액세스 할 수 있습니다. 프로젝트 1이 아닌 다른 클래스의 프로젝트 2에서는 액세스 할 수 없습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.