내부 클래스의 공용 대 내부 메서드
internal class Foo
{
public void Fee()
{
Debug.WriteLine("Fee");
}
internal void Fi()
{
Debug.WriteLine("Fi");
}
}
전체 클래스가 이미 내부이기 때문에 Fee ()와 Fi ()가 동등하게 액세스 할 수 있다고 생각합니다. 내가 뭔가를 간과하고 있습니까? 이와 같은 경우에 방법에 대해 공개 또는 내부를 선택할 이유가 있습니까?
internal class Foo
선언은의 접근보다 우선합니다 public void Fee()
효과적으로 내부 만드는 방법을.
이 경우 메서드에 내부 및 공용을 사용하면 동일한 효과가 있습니다. 이와 같은 경우에 공용 메서드와 내부 메서드를 선택하는 유일한 이유는 선택하면 향후 버전에서 공용 클래스로 쉽게 전환 할 수 있기 때문입니다.
대답에서 여기에 누락 된 유일한 것은 왜 이렇게 하시겠습니까?
일부 라이브러리에는 라이브러리 소비자가 만질 수없는 많은 클래스가 있지만 공용으로 표시된 인터페이스를 상속해야합니다. 예를 들어 IComparer 인터페이스를 상속하는 클래스가있는 라이브러리가 있지만 내부적으로 만 사용되며 라이브러리의 공용 측면을 어지럽히고 싶지 않습니다. 구현 된 Compare 함수를 내부로 표시하면 컴파일러에서 IComparer 인터페이스를 구현하지 않는다고 불평합니다.
그렇다면 인터페이스를 성공적으로 구현하는 동시에 라이브러리의 공개적인 측면에서 액세스 할 수 없도록하려면 어떻게해야합니까? 클래스를 내부로 표시하지만 구현 된 함수는 공용으로 표시하십시오.
실제로-반사를 사용하는 경우 큰 차이가 있습니다. 특히 Silverlight는 액세스 권한이 있더라도 리플렉션을 통해 내부 메서드에 액세스하려고하면 매우 화가 날 수 있습니다. 일반 .NET에서는 작동하지만 Silverlight에서 코드가 작동하도록 메서드를 공개해야하는 경우를 보았습니다.
일반 .NET의 부분 신뢰에서도 동일한 결과를 얻을 수 있습니다.
내부 클래스가 인터페이스를 구현하기를 원할 때 차이가 있습니다. 일부 인터페이스의 구현 인 메서드는 Public이어야합니다.
정확합니다. Fee와 Fi 모두 동일하게 액세스 할 수 있습니다.
CSharp 언어 사양 3.0에서 3.5.2 미만 :
프로그램 P 내에서 유형 T로 선언 된 중첩 멤버 M의 액세스 가능성 도메인은 다음과 같이 정의됩니다 (M 자체가 유형일 수 있음에 유의).
• 선언 된 M의 접근성이 공용이면 M의 접근성 도메인은 T의 접근성 도메인이됩니다.
따라서 Fee가 공개로 선언 되더라도 Foo만큼 액세스 할 수 있습니다 (예 : 내부).
msdn 문서 에 따르면 Foo 클래스는 어셈블리 외부에서 액세스 할 수 없으므로 메서드를 내부 또는 공용으로 표시하는 데 아무런 차이가 없습니다. InternalsVisibleTo 속성을 사용하여 차이를 만들지 않습니다.
클래스가 내부이면 내부 메서드 만 사용합니다. 마음이 바뀌고 클래스를 공개하는 경우 텍스트 바꾸기 만하면됩니다.
참고 URL : https://stackoverflow.com/questions/711361/public-vs-internal-methods-on-an-internal-class
'Development Tip' 카테고리의 다른 글
Symfony 2 양식 요소에 오류 추가 (0) | 2020.10.04 |
---|---|
405 메서드가 허용되지 않는 웹 API (0) | 2020.10.04 |
컬로 줄 바꿈을 보내는 방법은 무엇입니까? (0) | 2020.10.04 |
Django에서 단위 테스트를 어떻게 건너 뛰나요? (0) | 2020.10.04 |
Angular2 TypeScript 파일과 JavaScript 파일을 서로 다른 폴더로 분리 ( 'dist') (0) | 2020.10.04 |