나는 내 모든 대학 금지되나니 사용해 온 '공개', 그리고 차이점은 알고 싶습니다 '공개', '개인' 및 '보호'?
또한 '정적' 무엇을 할 수 있을 정도인 데 비해 아무것도요?
From docs.microsoft.com:
>. '있다' 고
>. 덕분에 다른 유형 또는 구성원 https://learning. 코드 같은 어셈블리나 참조하는 다른 조립품을 거잖나.
>. '개인'
>. 수 문자 또는 멤버 이벤트여야만 액세스하는지 코드 같은 클래스 또는 구조체입니다.
>. '보호'
>. 수 문자 또는 멤버 이벤트여야만 액세스하는지 코드 또는 동급 또는 구조체입니다, 파생 클래스.
>. 금지되었는지 '개인' (C # 에 추가된 7.2)
>. 수 문자 또는 멤버 이벤트여야만 액세스하는지 코드 또는 파생 클래스, 또는 구조체입니다 동급 동일한 어셈블리나 아닌 다른 조립품을.
>. '내부'
>. 유형 또는 멤버가 아닌 다른 조립품을 같은 어셈블리 코드를 통해 액세스할 수 있습니다.
>. '내부' 금지되었는지
>. 유형 또는 구성원 https://learning. 모든 코드 같은 어셈블리나 사용하거나 다른 부품에 의해 모든 파생 클래스.
, 설정되었습니다 no access 수정자의 때 기본 액세스 수정자의 사용됩니다. 그래서 항상 일종의 액세스만 수정자의 it& # 39 의 경우에도 설정되어 있지 않습니다.
정적 클래스 (class 에서 수정자의 있다는 그 모든 멤버를 정적인 인스턴스화되지 수 없습니다. 정적 멤버 a 가 그 유형에 관계없이 한 버전을 시용되는 인스턴스들도 생성될지 에워싼다.
정적 클래스는 클래스) 이 있는데, 비정적 기본적으로 동일한 하나의 차이가 있다. 정적 클래스 就不可能拥有 외부에서 인스턴스화됩니다. 즉, 클래스 변수를 만들 수 있는 새로운 키워드를 사용하여 delaymins 유형:. 없기 때문에 액세스하면 정적 클래스 인스턴스 변수, 클래스 이름을 사용하여 멤버가 있다.
하지만 은 그런 거 비호환성의 정적임 구성자를. 정적 클래스 등 모든 클래스에 이들 중 하나를 가질 수 있습니다. 그들은 직접 & 부를 수 없다. (다른 어떤 경쟁업체보다도 문자 클래스 매개변수에 대한 자체) 을 매개 변수를 가질 수 없습니다. 첫 번째 인스턴스에서는 정적 클래스를 자동으로 호출됨 구성자를 초기화하려면 전에 모든 멤버가 만들어지거나 정적임 참조되었습니다. 다음과 같습니다.
static class Foo()
{
static Foo()
{
Bar = "fubar";
}
public static string Bar { get; set; }
}
그 때문에, 정적 클래스는 일반적으로 같은 서비스를 사용할 수 있습니다.
MyStaticClass.ServiceMethod(...);
그래픽 媛쒖슂 (夸약 간단히 말해서)
! 가시도로
No access 의 경우, br /> 수정자의 설정값으로 동일팔레트에 앞에 http://schmidt. devlib. here:<. 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
[이 오토메이티드] 에서 이 멋진 그림을 다시 게시 (https://stackoverflow.com/a/22958035/2604492).
>. 다음은 에서 벤 다이어그램을 통해 더 많은 제한, 모든 액세스 수정자는 불규칙: >. >. '개인': >. enter 이미지 여기에 설명을! >. >. '개인 금지되었는지': - [C # 에 추가된 7.2] (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/private-protected) >. enter 이미지 여기에 설명을! >. >. '내부': >. enter 이미지 여기에 설명을! >. >. '보호': >. enter 이미지 여기에 설명을! >. >. '금지되었는지 내부': >. enter 이미지 여기에 설명을! >. >. '있다' 고. >. 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();
}
}
}
또 다른 시각적 외곽진입 현재 액세스만 수정자의 (C # 7.2). 스키마 쉽게 기억할 수 있기를 바랍니다 (이미지를 클릭하면 대화식 경치말이야) < /sub> sub> <;;;
, 너희에게베풀어진 둘은-말로 액세스만 수정자는 기억하기 위해 투쟁을 경우 외부 내부.
온데간데없군.
볼 수 있습니다. [액세스만 수정자는] [1].
간단히 말해서,
이 방법 또는 유형이 다른 커넥터로부터 가시도로 완료하십시오 공용 보기입니다 추상형데이터타입 / classes.
수 있는 유일한 방법 / 가변으로 액세스하려면 pbs. 입력하십시ᄃ오 개인 전용 방법 / 변수 (단, 또한 네스트된 클래스뿐만 액세스하도록 포함된 클래스뿐만 보면안돼 방법 / com/go/4e6b330a_kr).
금지되었는지 pbs. 비슷합니다 그러나 파생됨 클래스뿐만 금지되었는지 메서드을 액세스할 수 있습니다.
" Nothing"; & # 39 는 (VB.NET) 에 해당하는 nulll. # 39, re) 를 가리키는 경우 비록 you& " nothing"; 마무리라뇨 " 달려 있지만, 어떠한 액세스만 modifier", 관심용 매우 황삭 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)
, - br> anywhere.< 누구나 액세스할 수 있는 것이다.
그러나, br> VB.< nulll 같은 것은 없다. 정적 메서드는 해당 클래스의 인스턴스를 해당 객체의 모든 인스턴스의 뜻입니다.
그 위치를 지정할 수정자는 액세스하면 멤버여야 볼 수 있습니다. 아마 이 것들을 읽을 수 있습니다. 시행하십시오 시작점으로 이언 하 https://partner. 주어진다.
정적 클래스 멤버가 아니라 당 1 개 당 하나의 인스턴스입니다.
네 클래스뿐만 신중한 액세서빌러티를 조심해. 공공 및 금지되었는지 클래스와 방식은 기본적으로 사용할 수 있도록 모두에게말이지.
또한, Microsoft isn& # 39 의 액세스 수정자는 보여 주는 것은 아주 엑스프리스 (public, 보호, etc. 비주얼 스튜디오에서 여러_키워드) 때 새로운 클래스가 생성될지. 따라서 시행하십시오 생각해 잘 챙겨 it& # 39 의 해당 클래스의 액세서빌러티를 너회의 때문에 문을 데이터베이스에구성원을 구축상의 내부를.
C # 의 총 6 액세스만 수정자는:
보면안돼 : 이 멤버 선언되는 액세서빌러티를 내의 모든 것이 포함된 유형을 볼 수 있습니다, 보이지 않는 다른 유형의 추상형데이터타입 파생됨 외부에서 동일한 어셈블리나 유형은상위 redboot용 조립품을. 즉, 액세스 제한되는지 redboot*용 유형) 에 그쳤다.
금지되었는지 : 이 멤버 선언되는 액세서빌러티를 추상형데이터타입 파생됨 포함된 유형을 볼 수 있습니다, 그리고 내 안에 들어있는 조립품을 추상형데이터타입 파생됨 포함된 유형: redboot용 외부에서 조립품을. 즉, 액세스 할 수 있는 종류의 파생됨 제한되는지 유형:.
내부 : 이 멤버 선언되는 액세서빌러티를 어셈블리 내에 이 구성 요소를 포함하는 볼 수 있습니다 모든 조립품을 redboot용 조립품을 외부에서 볼 수는 없다. 즉, 액세스만 redboot*용 어셈블리에서만 제한됩니다.
내부 금지되었는지 : 이 멤버 내 안에 들어있는 유형: 추상형데이터타입 파생됨 선언되는 액세서빌러티를 볼 수 있습니다 또한 내의 모든 유형을 볼 수 있는 외부 또는 어셈블리나 redboot용 조립품을. 즉, 액세스만 어셈블리나 파생됨 유형은상위 redboot*용 제한됩니다.
공공 : 이 멤버 선언되는 액세서빌러티를 어셈블리 내의 구성원, 또는 다른 조립품을 redboot용 볼 수 있습니다 이 포함된 참조하는 조립품을. 즉, 액세스 제한되지 않습니다.
C # 7.2 를 새로운 차원의 추가에는 액세서빌러티를: