C #, 공개, 비공개, 보호 및 액세스 수정자의 없기 때문에 차이가 뭘까?

나는 내 모든 대학 금지되나니 사용해 온 '공개', 그리고 차이점은 알고 싶습니다 '공개', '개인' 및 '보호'?

또한 '정적' 무엇을 할 수 있을 정도인 데 비해 아무것도요?

해결책

액세스만 수정자는

From docs.microsoft.com:

&gt. '있다' 고

&gt. 덕분에 다른 유형 또는 구성원 https://learning. 코드 같은 어셈블리나 참조하는 다른 조립품을 거잖나.

&gt. '개인'

&gt. 수 문자 또는 멤버 이벤트여야만 액세스하는지 코드 같은 클래스 또는 구조체입니다.

&gt. '보호'

&gt. 수 문자 또는 멤버 이벤트여야만 액세스하는지 코드 또는 동급 또는 구조체입니다, 파생 클래스.

&gt. 금지되었는지 '개인' (C # 에 추가된 7.2)

&gt. 수 문자 또는 멤버 이벤트여야만 액세스하는지 코드 또는 파생 클래스, 또는 구조체입니다 동급 동일한 어셈블리나 아닌 다른 조립품을.

&gt. '내부'

&gt. 유형 또는 멤버가 아닌 다른 조립품을 같은 어셈블리 코드를 통해 액세스할 수 있습니다.

&gt. '내부' 금지되었는지

&gt. 유형 또는 구성원 https://learning. 모든 코드 같은 어셈블리나 사용하거나 다른 부품에 의해 모든 파생 클래스.

, 설정되었습니다 no access 수정자의 때 기본 액세스 수정자의 사용됩니다. 그래서 항상 일종의 액세스만 수정자의 it& # 39 의 경우에도 설정되어 있지 않습니다.

'정적' 수정자의

정적 클래스 (class 에서 수정자의 있다는 그 모든 멤버를 정적인 인스턴스화되지 수 없습니다. 정적 멤버 a 가 그 유형에 관계없이 한 버전을 시용되는 인스턴스들도 생성될지 에워싼다.

정적 클래스는 클래스) 이 있는데, 비정적 기본적으로 동일한 하나의 차이가 있다. 정적 클래스 就不可能拥有 외부에서 인스턴스화됩니다. 즉, 클래스 변수를 만들 수 있는 새로운 키워드를 사용하여 delaymins 유형:. 없기 때문에 액세스하면 정적 클래스 인스턴스 변수, 클래스 이름을 사용하여 멤버가 있다.

하지만 은 그런 거 비호환성의 정적임 구성자를. 정적 클래스 등 모든 클래스에 이들 중 하나를 가질 수 있습니다. 그들은 직접 &amp 부를 수 없다. (다른 어떤 경쟁업체보다도 문자 클래스 매개변수에 대한 자체) 을 매개 변수를 가질 수 없습니다. 첫 번째 인스턴스에서는 정적 클래스를 자동으로 호출됨 구성자를 초기화하려면 전에 모든 멤버가 만들어지거나 정적임 참조되었습니다. 다음과 같습니다.

static class Foo()
{
    static Foo()
    {
        Bar = "fubar";
    }

    public static string Bar { get; set; }
}

그 때문에, 정적 클래스는 일반적으로 같은 서비스를 사용할 수 있습니다.

MyStaticClass.ServiceMethod(...);
해설 (9)
      • 공용 클래스를 볼 수 있는지 그 방법을 볼 수 있습니다
        • 일부를 개인 경우 - 클래스, 그럼 그렇지 않으면 볼 수 있는 방법이 없습니다.
          • 금지되었는지 같은 개인 뿐만 아니라 모든 후손을 볼 수 있는 방법입니다.
      • 정적 (클래스) 사이의 차이를 주지하십시오 &quot Class"; 및 &quot Object"; ? 모든 것을 잊고. 이들은 static&quot &quot 마찬가지;;). 이 클래스는 one and only 인스턴스에서는 할 수 있다.
      • 정적 (방법) 이 방법을 사용하여 프레임을 참조입니다 독립화할 있을 때마다 실제 클래스 인스턴스는 일부입니다.
해설 (6)

그래픽 媛쒖슂 (夸약 간단히 말해서)

! 가시도로

No access 의 경우, br /&gt 수정자의 설정값으로 동일팔레트에 앞에 http://schmidt. devlib. here:&lt. https://stackoverflow.com/questions/3763612/default-visibility-for-c-sharp-classes-and-members-fields-methods-etc

비사양 네스트된

enum                              public
non-nested classes / structs      internal
interfaces                        internal
delegates in namespace            internal
class/struct member(s)            private
delegates nested in class/struct  private

네스트된:

nested enum      public
nested interface public
nested class     private
nested struct    private
해설 (5)

[이 오토메이티드] 에서 이 멋진 그림을 다시 게시 (https://stackoverflow.com/a/22958035/2604492).

&gt. 다음은 에서 벤 다이어그램을 통해 더 많은 제한, 모든 액세스 수정자는 불규칙: &gt. &gt. '개인': &gt. enter 이미지 여기에 설명을! &gt. &gt. '개인 금지되었는지': - [C # 에 추가된 7.2] (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/private-protected) &gt. enter 이미지 여기에 설명을! &gt. &gt. '내부': &gt. enter 이미지 여기에 설명을! &gt. &gt. '보호': &gt. enter 이미지 여기에 설명을! &gt. &gt. '금지되었는지 내부': &gt. enter 이미지 여기에 설명을! &gt. &gt. '있다' 고. &gt. enter 이미지 여기에 설명을!

해설 (0)

enter 이미지 여기에 설명을!

using System;

namespace ClassLibrary1
{
    public class SameAssemblyBaseClass
    {
        public string publicVariable = "public";
        protected string protectedVariable = "protected";
        protected internal string protected_InternalVariable = "protected internal";
        internal string internalVariable = "internal";
        private string privateVariable = "private";
        public void test()
        {
            // OK
            Console.WriteLine(privateVariable);

            // OK
            Console.WriteLine(publicVariable);

            // OK
            Console.WriteLine(protectedVariable);

            // OK
            Console.WriteLine(internalVariable);

            // OK
            Console.WriteLine(protected_InternalVariable);
        }
    }

    public class SameAssemblyDerivedClass : SameAssemblyBaseClass
    {
        public void test()
        {
            SameAssemblyDerivedClass p = new SameAssemblyDerivedClass();

            // NOT OK
            // Console.WriteLine(privateVariable);

            // OK
            Console.WriteLine(p.publicVariable);

            // OK
            Console.WriteLine(p.protectedVariable);

            // OK
            Console.WriteLine(p.internalVariable);

            // OK
            Console.WriteLine(p.protected_InternalVariable);
        }
    }

    public class SameAssemblyDifferentClass
    {
        public SameAssemblyDifferentClass()
        {
            SameAssemblyBaseClass p = new SameAssemblyBaseClass();

            // OK
            Console.WriteLine(p.publicVariable);

            // OK
            Console.WriteLine(p.internalVariable);

            // NOT OK
            // Console.WriteLine(privateVariable);

            // Error : 'ClassLibrary1.SameAssemblyBaseClass.protectedVariable' is inaccessible due to its protection level
            //Console.WriteLine(p.protectedVariable);

            // OK
            Console.WriteLine(p.protected_InternalVariable);
        }
    }
}
 using System;
        using ClassLibrary1;
        namespace ConsoleApplication4

{
    class DifferentAssemblyClass
    {
        public DifferentAssemblyClass()
        {
            SameAssemblyBaseClass p = new SameAssemblyBaseClass();

            // NOT OK
            // Console.WriteLine(p.privateVariable);

            // NOT OK
            // Console.WriteLine(p.internalVariable);

            // OK
            Console.WriteLine(p.publicVariable);

            // Error : 'ClassLibrary1.SameAssemblyBaseClass.protectedVariable' is inaccessible due to its protection level
            // Console.WriteLine(p.protectedVariable);

            // Error : 'ClassLibrary1.SameAssemblyBaseClass.protected_InternalVariable' is inaccessible due to its protection level
            // Console.WriteLine(p.protected_InternalVariable);
        }
    }

    class DifferentAssemblyDerivedClass : SameAssemblyBaseClass
    {
        static void Main(string[] args)
        {
            DifferentAssemblyDerivedClass p = new DifferentAssemblyDerivedClass();

            // NOT OK
            // Console.WriteLine(p.privateVariable);

            // NOT OK
            //Console.WriteLine(p.internalVariable);

            // OK
            Console.WriteLine(p.publicVariable);

            // OK
            Console.WriteLine(p.protectedVariable);

            // OK
            Console.WriteLine(p.protected_InternalVariable);

            SameAssemblyDerivedClass dd = new SameAssemblyDerivedClass();
            dd.test();
        }
    }
}
해설 (5)
    • 아무것도아니야 관한 질문에 대해
  • 이름공간이 유형은 내부 기본적으로

  • 멤버 등 모든 형태의 네스트된 유형은 보면안돼 기본적으로

해설 (0)

또 다른 시각적 외곽진입 현재 액세스만 수정자의 (C # 7.2). 스키마 쉽게 기억할 수 있기를 바랍니다 (이미지를 클릭하면 대화식 경치말이야) &lt /sub&gt sub&gt <;;;

! [대화형 액세스만 수정자는 svg] [2]

바깥쪽인지가 인사이드라면

, 너희에게베풀어진 둘은-말로 액세스만 수정자는 기억하기 위해 투쟁을 경우 외부 내부.

    • 보면안돼 금지되었는지 : * 금지되었는지 pbs. 바깥쪽인지가 (동일한 assembly) 인사이드라면 (동일한 assembly)
    • 금지되었는지 내부 : * 인사이드라면 금지되었는지 바깥쪽인지가 (동일한 assembly) 내부 (동일한 assembly)
해설 (0)

온데간데없군.

볼 수 있습니다. [액세스만 수정자는] [1].

간단히 말해서,

이 방법 또는 유형이 다른 커넥터로부터 가시도로 완료하십시오 공용 보기입니다 추상형데이터타입 / classes.

수 있는 유일한 방법 / 가변으로 액세스하려면 pbs. 입력하십시ᄃ오 개인 전용 방법 / 변수 (단, 또한 네스트된 클래스뿐만 액세스하도록 포함된 클래스뿐만 보면안돼 방법 / com/go/4e6b330a_kr).

금지되었는지 pbs. 비슷합니다 그러나 파생됨 클래스뿐만 금지되었는지 메서드을 액세스할 수 있습니다.

&quot Nothing"; & # 39 는 (VB.NET) 에 해당하는 nulll. # 39, re) 를 가리키는 경우 비록 you& &quot nothing"; 마무리라뇨 &quot 달려 있지만, 어떠한 액세스만 modifier&quot, 관심용 매우 황삭 rule of thumb (C # 에서 확실히) 가 바로 그런 don& 명시적으로 지정할 경우, t 는 이 방법 / 변수 선언 # 39 에 액세스 수정자의 일반적으로 으로 제한되었거나 수 있습니다. 예:

public class MyClass
{
    string s = "";
}

실질적으로 동일합니까:

public class MyClass
{
    private string s = "";
}

이 때, # 39 는 완전 설명스크립트 링크됨 MSDN 문서 there& 수정자의 액세스하면 명시적으로 지정한 게 전혀 없다.

[1]: 이아스파스 http://msdn.microsoft.com/en-us/library/ms173121 (VS.80)

해설 (0)

, - br&gt anywhere.&lt 누구나 액세스할 수 있는 것이다.

      • pbs. 이벤트여야만 액세스되는 수 있는 수준의 it 에서 부품이라면 of.&lt br>;
      • 금지되었는지 이벤트여야만 수 있는 모든 객체는 클래스의 상속하는 클래스 또는 에서 액세스되는 오프하도록.

그러나, br&gt VB.&lt nulll 같은 것은 없다. 정적 메서드는 해당 클래스의 인스턴스를 해당 객체의 모든 인스턴스의 뜻입니다.

해설 (0)

음.

이 함수는 정적 클래스의 인스턴스를 않고도 액세스하려면 있다는 의미입니다.

클래스 정의) 에서 직접 액세스할 수 있습니다.

해설 (0)

Pbs. 상태를 나타내는 변수를 액세스하는지 동일한 클래스의 객체를 사용할 수 있습니다. 금지되었는지 연장시킵니다 액세스하려면 클래스의 하위 항목이 포함되어 있는 상태를 잘 알려져 있다.

테이블 위에서 &quot, 개인 및 금지되었는지 복종 사이에서 볼 수 있습니다. 어떤 두 개의 서로 다른 두 가지 모두 동일한 .so command&quot 키워봤지 필요한 것 같다.

자세한 내용은 링크를 확인란 MSDN

해설 (0)

그 위치를 지정할 수정자는 액세스하면 멤버여야 볼 수 있습니다. 아마 이 것들을 읽을 수 있습니다. 시행하십시오 시작점으로 이언 하 https://partner. 주어진다.

정적 클래스 멤버가 아니라 당 1 개 당 하나의 인스턴스입니다.

해설 (0)

네 클래스뿐만 신중한 액세서빌러티를 조심해. 공공 및 금지되었는지 클래스와 방식은 기본적으로 사용할 수 있도록 모두에게말이지.

또한, Microsoft isn& # 39 의 액세스 수정자는 보여 주는 것은 아주 엑스프리스 (public, 보호, etc. 비주얼 스튜디오에서 여러_키워드) 때 새로운 클래스가 생성될지. 따라서 시행하십시오 생각해 잘 챙겨 it& # 39 의 해당 클래스의 액세서빌러티를 너회의 때문에 문을 데이터베이스에구성원을 구축상의 내부를.

해설 (0)

Oop 는 디자인 관련 좋은 것 같아요. (대표 숨길 경우 라리브러리 의 내부 작동 구조를 라이브러리가. 그래야 나중에 내부 작동을 라이브러리란 수정할 수 있습니다. 그래서 니말은 모세야 네 멤버 및 지원 방법, 단 인터페이스입니다 전용으로 방식이 있다. 메서드입니다 덮어쓰여질 보호되어야 한다고 합니다.

해설 (0)

C # 의 총 6 액세스만 수정자는:

  • 보면안돼 : 이 멤버 선언되는 액세서빌러티를 내의 모든 것이 포함된 유형을 볼 수 있습니다, 보이지 않는 다른 유형의 추상형데이터타입 파생됨 외부에서 동일한 어셈블리나 유형은상위 redboot용 조립품을. 즉, 액세스 제한되는지 redboot*용 유형) 에 그쳤다.

  • 금지되었는지 : 이 멤버 선언되는 액세서빌러티를 추상형데이터타입 파생됨 포함된 유형을 볼 수 있습니다, 그리고 내 안에 들어있는 조립품을 추상형데이터타입 파생됨 포함된 유형: redboot용 외부에서 조립품을. 즉, 액세스 할 수 있는 종류의 파생됨 제한되는지 유형:.

  • 내부 : 이 멤버 선언되는 액세서빌러티를 어셈블리 내에 이 구성 요소를 포함하는 볼 수 있습니다 모든 조립품을 redboot용 조립품을 외부에서 볼 수는 없다. 즉, 액세스만 redboot*용 어셈블리에서만 제한됩니다.

  • 내부 금지되었는지 : 이 멤버 내 안에 들어있는 유형: 추상형데이터타입 파생됨 선언되는 액세서빌러티를 볼 수 있습니다 또한 내의 모든 유형을 볼 수 있는 외부 또는 어셈블리나 redboot용 조립품을. 즉, 액세스만 어셈블리나 파생됨 유형은상위 redboot*용 제한됩니다.

  • 공공 : 이 멤버 선언되는 액세서빌러티를 어셈블리 내의 구성원, 또는 다른 조립품을 redboot용 볼 수 있습니다 이 포함된 참조하는 조립품을. 즉, 액세스 제한되지 않습니다.

C # 7.2 를 새로운 차원의 추가에는 액세서빌러티를:

  • 보면안돼 금지되었는지 : 이 멤버 선언되는 액세서빌러티를 추상형데이터타입 파생됨 redboot용 유형 내에서 어셈블리 내에 포함된 이 볼 수 있습니다. 모든 유형을 볼 수 없는 것은 외부의 파생됨 포함된 유형이거나 redboot*용 조립품을. 즉, 안에 들어있는 조립품을 액세스하면 추상형데이터타입 파생됨 제한됩니다.

소스 코드를 포함한 새 개인 금지되었는지 수정자의 샘플링합니다 액세스하면

해설 (0)