3.內部類訪問外部類
- 內部類訪問外部類 例子
- namespace GameStatistical.Test.InnerClass
- {
- public class Person1
- {
- private string name;
- public string Name
- {
- get { return name; }
- set { name = value; }
- }
- private string sex;
- public string Sex
- {
- get { return sex; }
- set { sex = value; }
- }
- public void Show1()
- {
- Console.WriteLine(this.name + "==>" + this.sex);
- }
- private static void Show2()
- {
- Console.WriteLine("===================>");
- }
- internal void Show3()
- {
- Console.WriteLine(this.name + "==>" + this.sex);
- }
- public class Student
- {
- public void SetPer(string name, string sex)
- {
- Person1 p = new Person1();
- p.name = name;
- p.sex = sex;
- p.Show3();
- p.Show1();
- }
- }
- }
- }
這段代碼同樣定義了一個外部類Person1 和一個內部類Student,內部類中的SetPer()調用了外部類中的方法,寫這段代碼我們可以發現 嵌套類可以訪問外部類的方法、屬性、字段而不受訪問修飾符的限制
4.內部類的繼承
- 內部類繼承例子1
- 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();
- student.Display();
- }
- }
- }
內部類繼承,上面的內部類定義了父類,其中public virtual void Show() 使用virtual 修飾,可以用於子類重寫這個方法,看內部類繼承子類是否能夠重寫這個方法。
- 內部類繼承例子2
- namespace GameStatistical.Test.InnerClass
- {
- public class SubPerson:Person
- {
- public class SubStudent : Student
- {
- public override void Show()
- {
- base.Show();
- }
- }
- }
- }
上面的代碼重寫了Show() 這個方法,說明內部類的繼承可以通過
5.反射內部類
對於這段代碼,是從其他網站看到的,反射內部類我們不能直接通過 "." 操作符直接來操作,而是通過 "+" 操作符。前面也提到過內部類也是一種有效的管理命名空間的方法,這裡也是普通類和內部類的一點區別:
反射內部類
- Activator.CreateInstance("GameStatistical.Test.InnerClass", "GameStatistical.Test.InnerClass.ReflectionPerson+Student");
反射普通類
- Activator.CreateInstance("GameStatistical.Test.InnerClass", "GameStatistical.Test.InnerClass.ReflectionPerson.Student");
在實際操作中,內部類好像使用的比較少,這裡也只是非常簡單的介紹,作為一個知識點總結起來。
【編輯推薦】