C# 액세스 손질
인터넷: 내부 클래스로 성명되며 현재 프로젝트의 코드만 접근할 수 있습니다. (기본적으로도 인터넷)
public:
공통 클래스, 다른 프로젝트의 코드에 접근할 수 있습니다
보호된: 같은 클래스나 구조 또는 이런 파생 클래스 코드만 접근할 수 있습니다
private: 같은 클래스나 구조의 코드만 이 유형의 구성원에 접근할 수 있습니다
보호된 인터넷: 같은 프로그램에만 집중되거나 다른 프로그램에만 집중된 파생 클래스
세부 사항:
(1) 명명 공간에서 직접 정의할 수 있는 클래스의 접근 수식자는 인터넷만 가능하고,public(2) 구조 구성원(class,struct 포함)은public,private,internal(struct는 계승할 수 없습니다.
보호되지 않음)
(3) 클래스 구성원(class,struct 포함)은public,private,protected,internal,protected internal로 성명할 수 있다.플러그인 클래스와 구조를 포함하여 클래스 구성원입니다. 기본값은private입니다.개인 플러그인 종류
유형
그것의 외곽에 방문할 수 없다.
(4) 계승된 클래스는 기본 클래스보다 높은 접근 등급을 가질 수 없다
(5) 보호된 인터넷에 관해서는 이 특이한 것이 같은 프로젝트에서 (다른 명칭 공간일 수 있음) 이럴 때
보호된 인터넷 장식된 필드로 내부 클래스가 같은 항목의 다른 코드로
방문, 이럴 때 보호의 역할을 잃고 인터넷만 사용됩니다.
다른 프로젝트에서 이럴 때 보호된 인터넷 수식 필드에 접근할 수 없습니다. 보호된 필드와 인터넷이 동시에 작용하는 것 같습니다. 그러나 이 때 원래 프로젝트를 계승하는 클래스를 구성하면 계승합니다.
클래스에서 보호된 인터넷에 접근할 수 있는 것은 보호된 것만 작용하는 것 같습니다.
인스턴스 코드:
두 항목은 각각 consoleApplication2, consoleApplication3
consoleApplication2에는 다음과 같은 파일이 있습니다.
Class1.cs, Class2.cs,Class3.cs, namespaceTest.cs,Program.cs
//Class1.cs
namespace ConsoleApplication2
{
class Class1
{
private class Test1
{
public int a = 1;
}
protected class Test2
{
public int b = 2;
}
public class Test3
{
int c = 3;
}
protected internal class Test4
{
int d = 4;
}
internal class Test5
{
int e = 5;
}
int aa = 1;
private int bb = 2;
protected int cc = 3;
public int dd = 4;
internal int ee = 5;
protected internal int ff = 6;
}
}
//Class2.cs using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
internal class Class2
{
public void print()
{
Class1 cs = new Class1();
//Console.WriteLine("same assemble use Class2 to test Class1's default field :{0}",cs.aa); //error,default field
//Console.WriteLine("same assemble use Class2 to test Class1's private field :{0}",cs.bb); //error,private field
//Console.WriteLine("same assemble use Class2 to test Class1's protected field :{0}",cs.cc); //error,proteced filed
Console.WriteLine("same assemble use Class2 to test Class1's public field :{0}",cs.dd); //OK, public field
Console.WriteLine("same assemble use Class2 to test Class1's internal field :{0}", cs.ee); //OK, internal field
Console.WriteLine("same assemble use Class2 to test Class1's protected internal field :{0}", cs.ff); //OK, protected internal field
}
public void printClass()
{
Class1 cs = new Class1();
//Class1.Test1 t1 = new Class1.Test1(); //error, private class
//Class1.Test2 t2 = new Class1.Test2(); //error, protected class
Class1.Test3 t3 = new Class1.Test3(); //OK, public class
Class1.Test4 t4 = new Class1.Test4(); //OK, protected inner class
Class1.Test5 t5 = new Class1.Test5(); //OK, inner class
}
}
}
//Class3.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
public class Class3
{
public int x = 11;
protected int y = 22;
protected internal int z = 33;
private class Test1
{
public int a = 1;
}
protected class Test2
{
public int b = 2;
}
public class Test3
{
int c = 3;
}
protected internal class Test4
{
int d = 4;
}
internal class Test5
{
int e = 5;
}
}
}
//namespaceTest.cs using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConsoleApplication2;
namespace namespaceTest
{
class Test
{
public void printClass()
{
Console.WriteLine("this is in consoleApplication namespaceTest ");
Class1 cs = new Class1();
//Class1.Test1 t1 = new Class1.Test1(); //error, private class
//Class1.Test2 t2 = new Class1.Test2(); //error, protected class
Class1.Test3 t3 = new Class1.Test3(); //OK, public class
Class1.Test4 t4 = new Class1.Test4(); //OK, protected inner class
Class1.Test5 t5 = new Class1.Test5(); //OK, inner class
}
public void print()
{
Console.WriteLine("this is in consoleApplication namespaceTest ");
Class1 cs = new Class1();
//Console.WriteLine("same assemble use Class2 to test Class1's default field :{0}",cs.aa); //error,default field
//Console.WriteLine("same assemble use Class2 to test Class1's private field :{0}",cs.bb); //error,private field
//Console.WriteLine("same assemble use Class2 to test Class1's protected field :{0}",cs.cc); //error,proteced filed
Console.WriteLine("same assemble use Class2 to test Class1's public field :{0}", cs.dd); //OK, public field
Console.WriteLine("same assemble use Class2 to test Class1's internal field :{0}", cs.ee); //OK, internal field
Console.WriteLine("same assemble use Class2 to test Class1's protected internal field :{0}", cs.ff); //OK, protected internal field
}
}
}
//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("this is in consoelApplication2");
Class2 C2 = new Class2();
C2.print();
C2.printClass();
namespaceTest.Test CTest = new namespaceTest.Test();
CTest.print();
}
}
}
ConsoleApplication3의 파일Class4.cs, Program.cs
//Class4.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConsoleApplication2;
namespace ConsoleApplication3
{
//C# has no public,private ,protected to modify class in deriving
class Class4: Class3
{
int xx;
int yy;
int zz;
public void print()
{
xx = x;
yy = y;
zz = z;
Console.WriteLine("out class derived from public class public filed is:{0}",xx);
Console.WriteLine("out class derived from public class protected field is:{0}",yy);
Console.WriteLine("out class derived from public class protected internal fiels is:{0}",zz);
}
};
}
//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConsoleApplication2;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("This is in consoleApplication3");
printClass();
print();
Class4 inTest4 = new Class4();
inTest4.print();
}
static void print()
{
Class3 outTst = new Class3();
Console.WriteLine("outer class use public class to test public filed {0}", outTst.x);
//Console.WriteLine("outer class use public class to test protected filed {0}",outTst.y); //error,protected field
//Console.WriteLine("outer class use public class to test protected internal filed {0}", outTst.z); //error protected internal field
}
static void printClass()
{
//Class1 outTest1 = new Class1(); //error, this is inner class
//Class2 outTest2 = new Class2(); //error, this is inner clss
Class3 outTest3 = new Class3(); //OK, this is public class
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.