C#嵌套類
阿新 • • 發佈:2017-09-20
名稱 containe span void container sharp 規則 ati 靜態成員
嵌套類顧名思義就是類或者結構中定義的類
class Container { class Nested { Nested() { } } }
<1>嵌套類的默認訪問權限是private ,可以指定為public,protected,private,internal,protected internal。
<2>嵌套類型可以訪問外部類(包裹嵌套類的類),如果要訪問外部類型,要把外部類通過構造函數傳進一個實例
<3>嵌套類中只能訪問外部類中的靜態成員,不能直接訪問外部類的非靜態成員。
namespace ConsoleApplication11Anonymous {class Class1 { private int x; protected string str; static int y; public class Nested { int xx; string ss; void print() { //int y = x; //error,不能訪問外部的非靜態成員 int z = y; //OK ,可以訪問外部的靜態成員} public Nested(Class1 A) { xx = A.x; //通過外部類的實例來訪問外部類私有成員 ss = A.str; //通過外部類的實例來訪問外部類保護成員 } } } class Program { static void Main(string[] args) { Class1 X= new Class1(); Class1.Nested CN = new Class1.Nested( X ); } } }
<4>根據C#作用域的規則,外部類只能通過內部類的實例來訪問內部類的public成員,不能訪問protected,private。
class Class2 { private int x; static private int y; public void func() { //x = xx; //當前上下文中不存在名稱“xx” //x = zz; //當前上下文中不存在名稱“zz” //x = aa; //當前上下文中不存在名稱“aa” x = Nested.aa; Console.WriteLine(x); } public void funcs() { //這個只能訪問Nested類的public成員 Nested XX = new Nested(); x = XX.zz; Console.WriteLine(x); //x = XX.aa;//訪問靜態成員只能通過類名而不是實例 x = Nested.aa; Console.WriteLine(x); } private class Nested { private int xx; protected int yy; public int zz; public static int aa; } }
C#嵌套類