最近在看Java一方面的書籍,看到一個很奇怪的問題,Java類中還可以再定義一個類,這種結構非常特殊!後來才發現,原來C#中也有內部類,之前都一直沒有注意過這個語法結構!
51CTO推薦閱讀:C#內部類簡單分析
使用內部類有這樣幾個好處:
(1)抽象外部類的某一狀態下的行為,隱藏實現,通過修改該內的訪問修飾符,可以設置僅有外部類可以訪問該類。
(2)擴展了命名空間,可以將外部類的類名作為內部類的一個命名空間(這裡只是相當於,但不是真正的命名空間)。
(3)內部類可以當作外部類的一個擴展,可以活的更好的封裝。
上面的這些特點胡亂的總結了一下,可能有些詞不達意,下面有些具體例子:
1.內部類的定義:
嵌套類:在一個類中定義另外一個類,主要分為靜態嵌套類和非靜態嵌套類(又稱之為"內部類")。內部類的定義結構:
(1)在一個類中直接定義類。
(2)在一個方法中定義類。
(3)匿名內部類。
2.外部類訪問內部類
- 外部類訪問內部類 例子
- namespace GameStatistical.Test.InnerClass
- {
- public class Person
- {
- public class Student
- {
- public static int age;
- internal static int height;
- private static string sex;
- public virtual void Show()
- {
- Console.WriteLine("年齡:"+age);
- Console.WriteLine("身高:"+height);
- }
- internal void Display()
- {
- Console.WriteLine("internal");
- Console.WriteLine("年齡:" + age);
- Console.WriteLine("身高:" + height);
- }
- }
- public void Show()
- {
- Student.age = 21;
- Student.height = 75;
- Student student = new Student();
- student.Show();
- }
- }
- }
該段代碼定義了一個外部類Person 和一個內部類Student, 其中內部類Student中使用了各種修飾符修飾的變量和方法,從上面的例子可以看出外部類只能夠訪問嵌套類中修飾符為public、internal的字段、方法、屬性。調用外部類的 Show()方法運行得到如下結果: