IT story

"네임 스페이스에 정의 된 요소는 비공개, 보호 또는 보호 내부로 명시 적으로 선언 할 수 없습니다."오류

hot-time 2020. 12. 30. 19:16
반응형

"네임 스페이스에 정의 된 요소는 비공개, 보호 또는 보호 내부로 명시 적으로 선언 할 수 없습니다."오류


클래스를 비공개로 만들려고했는데 "네임 스페이스에 정의 된 요소를 비공개, 보호 또는 보호 내부로 명시 적으로 선언 할 수 없습니다."라는 오류가 발생했습니다.

그 의미를 알지만 왜 이것이 허용되지 않는지 묻고 싶습니다. 모든 액세스 수정 사항이 클래스에 적용되지 않습니까? 클래스를 비공개, 보호 또는 보호 내부로 만들 수없는 이유는 무엇입니까?


private은 멤버가 포함하는 클래스에서만 볼 수 있음을 의미하기 때문입니다. 최상위 클래스에는이를 포함하는 클래스가 없으므로 개인 (또는 보호)이 될 수 없습니다. (내부 또는 공개는 유효한 수정 자입니다).

최상위 클래스에서 private이 의미하는 바는 무엇입니까?

물론 모든 수정자는 중첩 된 클래스, 즉 다른 클래스 내에 정의 된 클래스에 적용됩니다.


public또는 internal네임 스페이스 수준 에서만 사용할 수 있습니다.


말이 안 되니까요. 중첩 된 클래스로만 네임 스페이스 수준에서 정의 된 보호 또는 개인 클래스에 액세스 할 수있는 방법은 없습니다.


Abatonime이 말했듯이public 또는 internal네임 스페이스 수준 에서만 사용할 수 있습니다 .
private, protected또는 protected internal단지 클래스 레벨에서 사용할 수 있습니다.

이것은 작동합니다

namespace X
{
    class A
    {
        // class code here

        private class B
        {
            // class code here
        }
    }
}

이건 안돼

namespace X
{
    class A
    {
        // class code here
    }

    private class B
    {
        // class code here
    }
}

중첩 된 클래스 만 비공개로 선언 할 수 있습니다. 중첩되지 않은 클래스는 공용 또는 내부 (수정 자없이 암시 적) 만 가능합니다.


사용자 지정 DLL을 만들고 DLL을 사용하는 응용 프로그램에서 특정 클래스 만 볼 수 있기를 원했기 때문에 이와 동일한 문제가 발생했습니다. 그래서 나는 (특정 네임 스페이스 내에서) 비공개가되고 싶은 클래스에 대한 한정자를 완전히 제거합니다. 클래스는 DLL의 동일한 네임 스페이스 내의 다른 클래스에 계속 액세스 할 수 있었지만 호출 응용 프로그램의 Intellisense에는 표시되지 않았습니다. 중첩 된 클래스가 필요하지 않습니다. 내가 생각할 수있는 유일한 설명은 "명시 적으로"private로 선언 할 수 없다는 오류 메시지입니다. 암시 적으로 아무 것도 말하지 않습니다.

namespace SmartCardAuthentication
{
  class SmartCardIdentity : IIdentity
  {
    private string _firstName;
    private string _lastName;
    private string _middleInitial;

        ....
   }
}

위의 예제 코드에서 "SmartCardIdentity"클래스는 동일한 네임 스페이스 내의 다른 클래스에서 사용할 수 있지만이 클래스가 DLL로 롤링 될 때 응용 프로그램을 호출하는 데 사용할 수 없습니다. 다른 방식으로 테스트하지 않았습니다 (예 : DLL 내의 다른 네임 스페이스에있는 클래스의 가시성).


최상위 유형의 기본 접근성은입니다 internal.

클래스 및 구조체 멤버의 기본 액세스 가능성은입니다 private.

인터페이스 및 열거 형 멤버의 유일한 액세스 가능성은 public.

따라서 클래스는 기본적 private으로이며 액세스하려면 그 public앞에 넣어야 합니다.


Only Public and Internal are applicable when defining class. If no access modifier is defined before the class default is internal.

refer to MSDN - [https://msdn.microsoft.com/en-us/library/8fd16xs0(v=vs.90).aspx]


In real world we are focus on visible object Once object is visible then we talk about scope of the object

example in real world

If you walking on street, you see houses in a colony colony has houses. If colony is protected no one can't able to see houses It is consider that no colony no houses is present

In Programming

If we make class as private/ protected at top-level no one known about it

is it present in assembly ?

please correct me, if i am out of the scope

ReferenceURL : https://stackoverflow.com/questions/7379679/error-elements-defined-in-a-namespace-cannot-be-explicitly-declared-as-private

반응형