씨 # /. NET의 네임 스페이스 전용 클래스 가시성?
C #에서는 다른 어셈블리에 살지 않고 자체 네임 스페이스 내에서만 클래스를 표시 할 수 있습니까? 이것은 다른 곳에서 사용되는 사용 안되는 일반적인 도우미 클래스에 있습니다. (즉, 자바가 패키지 개인 클래스라고 부르는 것)
나는 당신이 원하는 것이 가능하다고 생각하지 않습니다.
클래스를 만들 수 internal
있도록 이렇게하면 어셈블리 외부의 모든 사용자 가 클래스를 사용할 수 없습니다. 그러나이 작업을 수행하려는 각 네임 스페이스에 대해 별도의 어셈블리 를 지정합니다 . 그것이 당신 나는 이 그것을 원하지 않는 이유라고 가정하고 있습니다.
C # 컴파일러를 사용하여 네임 스페이스 가시성 적용
도움이 될 수있는 "가짜 네임 스페이스"의 한 형태로 부분 클래스를 사용하는 방법을 참조 문서 ( C #의 네임 스페이스 가시성 )가 있습니다.
저자는 이것이 완벽하게 작동하지 않는다고 지적하고 단점에 대해 논의합니다. 주요 문제는 C # 디자이너가 기본 방식으로 작동 하지 않도록
C #을 설계했다는 것입니다. 이는 .NET Framework의 가장 큰 장점 중 하나 인 C # /. NET의 예상 코딩 방식과 크게 늘어납니다.깔끔한 속임수입니다… 이제는 하지요.
내부는 어셈블리 (엄격히 말하면 모듈) 프라이버시입니다. 네임 스페이스 가시성에는 영향을주지 않습니다.
동일한 어셈블리 내의 다른 클래스에서 클래스의 개인 정보를 보호하는 유일한 방법은 클래스가 내부 클래스가되는 것입니다.
이 시점에서 클래스가 비공개 인 경우 해당 클래스 또는 외부 클래스 자체에없는 설명보기.
보호 된 경우 비공개 일 때 볼 수있는 모든 사람에게 표시 외부 클래스의 하위 클래스에도 표시됩니다.
public class Outer
{
private class Hidden { public Hidden() {} }
protected class Shady { public Shady() {} }
public class Promiscuous { public Promiscuous() {} }
}
public class Sub : Outer
{
public Sub():base()
{
var h = new Hidden(); // illegal, will not compile
var s = new Shady(); // legal
var p = new Promiscuous(); // legal
}
}
public class Outsider
{
public Outsider()
{
var h = new Outer.Hidden(); // illegal, will not compile
var s = new Outer.Shady() // illegal, will not compile
var p = new Outer.Promiscuous(); // legal
}
}
어떤 형태로 원하는 것을 달성하는 유일한 방법은 외부 클래스를 네임 스페이스의 한 형태로 사용하고 해당 클래스 내에서 제한하는 것입니다.
단일 어셈블리가있는 경우 어셈블리에서 원하는만큼 스페이스를 정의 할 수 있습니다 IDE에서 적용하는 수정 자에 관계가 항상 다른 네임 스페이스의 클래스를 볼 수 있습니다.
직접적으로 가능한지 확실하지 않은 가짜로 만드는 몇 가지 좋은 방법은 다음과 다양합니다.
1) 이런 종류의 물건이 필요한 클래스는 도우미 클래스를 내부 클래스로 단일 클래스에서 상속받습니다.
2) 확장 메서드를 확장 다음 네임 스페이스 내의 확장 메서드 만 참조하십시오.
참고 URL : https://stackoverflow.com/questions/1223873/namespace-only-class-visibility-in-c-net
'ProgramingTip' 카테고리의 다른 글
SignalR 2.0 .NET 클라이언트를 서버 허브에 다시 연결하는 모범 사례 (0) | 2020.10.19 |
---|---|
왜 \ 0을 C에서 char 배열의 첫 번째 요소로 정의하고 있습니까? (0) | 2020.10.19 |
Windows Forms 애플리케이션에서 기본 아이콘 변경 (0) | 2020.10.19 |
함수를 사용하기 위해 스칼라 파일을 인터프리터에로드 하시겠습니까? (0) | 2020.10.19 |
새 뷰 컨트롤러를 생성 후 어떻게 뷰 컨트롤러 파일을 생성합니까? (0) | 2020.10.19 |