development

C #의 내부 대 공용

big-blog 2020. 9. 16. 08:06
반응형

C #의 내부 대 공용


publicinternal가시성 수정 자의 차이점을 알고 싶습니다 .

internal수업에서 언제 사용해야 public합니까? 메서드가 public또는 이어야 할 때 혼란스러워합니다 internal.

나는 읽고 internal있는 동안, 총회를 통해 액세스 할 수 있습니다 public또한 조립 곳의 차이 거짓말을 통해 사용할 수 있습니다.


public 어디에서나 볼 수 있습니다.

internal 어셈블리 내에서만 볼 수 있습니다.

내부 API를 보호하기 위해 내부 전용을 사용하는 경향이 있습니다. 예를 들어 메서드의 여러 오버로드를 노출 할 수 있습니다.

public int Add(int x, int y)
public int Add(int x,int y, int z)

둘 다 내부 메서드를 호출합니다.

internal int Add(int[] numbers)

그런 다음 메서드에 많은 정교함을 넣을 수 있지만 프로그래머가 메서드를 올바르게 호출하는 데 도움이 될 수있는 파사드 메서드를 사용하여 "보호"할 수 있습니다. (예를 들어, 배열 매개 변수가있는 구현 방법은 값의 임의 제한을 가질 수 있습니다.)

또한 Reflection을 사용하면 가시성과 관계없이 모든 메서드를 호출 할 수 있습니다. 내부적으로 숨겨진 API를 제어 / 접근하기위한 또 다른 "해킹".


internal다른 DLL에서 액세스 할 수 있으므로
일반적으로 멤버를 선언 할 때 DLL 외부가 아닌 DLL 내부에서 멤버 또는 형식을 선언 할 때 유용합니다 Public. 그러나 클래스 라이브러리 내에서 무언가를 public으로 선언해야하는 경우 Internal.
공식 방어 : 내부 구성원은 현재 어셈블리 내부에서 볼 수 있습니다 ...


internal단위 테스트를 작성할 때도 유용합니다. InternalsVisibleTo특성을 사용하면 테스트 어셈블리가 코드 어셈블리의 내부 메서드에 액세스 할 수 있습니다. 즉 리플렉션을 사용하지 않고 외부 세계에 비공개로 보이는 방법을 테스트 할 수 있습니다.


어셈블리 외부에서도 Public에 액세스 할 수 있습니다. 따라서 액세스해서는 안되는 클래스가 어셈블리의 모든 클래스에서 액세스 할 수 있어야하는 경우 내부가 옳습니다. 외부 액세스가 필요한 경우 public을 사용하십시오.


또한로 표시된 속성 은 WPF의 DataBinding에 사용되는 경우 internal를 throw합니다 BindingExpression path error. 따라서 publicDataBinding이 동일한 어셈블리 내에서 발생하더라도 제대로 작동하려면 이러한 작업이 수행되어야합니다.


외부에서 어셈블을 참조 할 수 있으면 내부 및 공용 클래스의 범위가 있습니다.

참고 URL : https://stackoverflow.com/questions/4182015/internal-vs-public-in-c-sharp

반응형