您好,登錄后才能下訂單哦!
C#中如何使用內部類,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
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()方法運行得到如下結果:
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");
看完上述內容,你們掌握C#中如何使用內部類的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。