C #의 내부 봉인 클래스 란 무엇입니까?
VS2010에서 언어 지원을 확장하기 위해 C # 코드를 살펴보고있었습니다 (Ook 예제). 나는 어떤 수업을 보았다internal sealed class
이것들은 무엇을합니까? 그것들을 사용할까요?
다음과 같은 클래스입니다.
internal: 정의 된 어셈블리 (또는 동반 어셈블리) 내에서만 액세스 할 수 있습니다.sealed: 상속 될 수 없습니다.
클래스를 다음으로 표시 internal하는 것은 어셈블리의 외부 사용자가 클래스를 사용 하지 못하게하는 방법입니다. 이는 실제로 디자인 캡슐화의 한 형태이며 IMHO는 의도 된 공개 API \ object 모델의 일부가 아닌 유형을 internal. 장기적으로 이것은 라이브러리 사용자가 의도하지 않은 유형에 자신을 결합하는 것을 방지합니다. 이러한 종류의 의도하지 않은 결합은 클라이언트를 중단하지 않고는 변경할 수 없기 때문에 라이브러리 구현 방식을 변경하고 발전시키는 능력에 해를 끼칩니다. 를 사용 internal하면 도서관의 공용 및 사용 가능한 표면 영역을 의도 한 수준으로 유지하는 데 도움이됩니다.
클래스를 sealed다음 으로 표시 하면 이러한 클래스가 상속되지 않습니다. 이것은 클래스가 이미 너무 전문화되어있는 경우에 유용 할 수있는 매우 과감한 설계 의도로, 상속을 통해 직접 또는 동작을 재정 의하여 다른 기능을 추가하지 않아야하는 것이 합리적입니다.
internal와 sealed매우 다른 방법으로 유형을 수정,하지만 그들은 함께 사용할 수 있습니다.
NBinternal 다른 어셈블리 세트를 '친구'로 정의 할 수 있으므로 추가 범위 제어가 가능합니다. 이러한 friend 어셈블리는 internal유형에 액세스 할 수 있습니다. 이는 생산 및 테스트 어셈블리와 같은 협력 어셈블리 세트를 정의하는 데 유용 할 수 있습니다. 테스트 어셈블리는 테스트중인 어셈블리의 모든 유형을 볼 수있는 것이 바람직합니다.
internal : 동일한 어셈블리 내에서만 액세스 할 수있는 클래스입니다.
Assembly1.dll :
namespace test { internal class InternalClass { } public class PublicClass { } }Assembly2.dll :
using test; ... InternalClass c1; // Error PublicClass c2; // OK봉인 : 파생 될 수없는 클래스
sealed class SealedClass { ... } class ChildClass : SealedClass {} //ERROR
내부는 멤버가 동일한 어셈블리에 정의 된 다른 형식에 액세스 할 수 있음을 의미합니다. Sealed 클래스는 추상의 반대입니다. 인스턴스화 할 수 있지만 기본 클래스로 사용할 수 없습니다. 클래스를 봉인하는 주된 이유는 사용자가 클래스를 조작하고 깨뜨리는 것을 방지하기위한 것입니다. 클래스 봉인이 봉인되지 않은 클래스에서는 불가능한 특정 컴파일러 최적화를 허용하는 경우이기도합니다.
internal sealed클래스는 하나입니다 :
internal-동일한 어셈블리 내에서만 액세스
sealed할 수 있습니다.-서브 클래 싱 할 수 없습니다.
즉, 직접 사용할 방법이 없습니다.
내부 는 동일한 어셈블리에서만 사용할 수 있음을 의미합니다.
내부 키워드는 유형 및 유형 멤버에 대한 액세스 수정 자입니다. 내부 형식 또는 멤버는 동일한 어셈블리의 파일 내에서만 액세스 할 수 있습니다.
상속 될 수없는 봉인
봉인 된 클래스는 상속 될 수 없습니다. 봉인 된 클래스를 기본 클래스로 사용하는 것은 오류입니다. 클래스의 상속을 방지하려면 클래스 선언에 봉인 된 수정자를 사용하십시오.
참고 URL : https://stackoverflow.com/questions/4619185/what-is-an-internal-sealed-class-in-c
'Nice programing' 카테고리의 다른 글
| 오류 : 버전 충돌 수정 (google-services 플러그인) (0) | 2020.11.19 |
|---|---|
| 시차 (0) | 2020.11.19 |
| Rails 모듈에서 URL 도우미에 액세스하는 방법 (0) | 2020.11.19 |
| 형식 또는 네임 스페이스 이름 'Entity'가 네임 스페이스 'System.Data'에 없습니다. (0) | 2020.11.19 |
| 정규식 범위의 이스케이프 점 (0) | 2020.11.19 |