新聞中心
最近在看Java一方面的書籍,看到一個(gè)很奇怪的問題,Java類中還可以再定義一個(gè)類,這種結(jié)構(gòu)非常特殊!后來才發(fā)現(xiàn),原來C#中也有內(nèi)部類,之前都一直沒有注意過這個(gè)語法結(jié)構(gòu)!

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出漳縣免費(fèi)做網(wǎng)站回饋大家。
推薦閱讀:C#內(nèi)部類簡單分析
使用內(nèi)部類有這樣幾個(gè)好處:
(1)抽象外部類的某一狀態(tài)下的行為,隱藏實(shí)現(xiàn),通過修改該內(nèi)的訪問修飾符,可以設(shè)置僅有外部類可以訪問該類。
(2)擴(kuò)展了命名空間,可以將外部類的類名作為內(nèi)部類的一個(gè)命名空間(這里只是相當(dāng)于,但不是真正的命名空間)。
(3)內(nèi)部類可以當(dāng)作外部類的一個(gè)擴(kuò)展,可以活的更好的封裝。
上面的這些特點(diǎn)胡亂的總結(jié)了一下,可能有些詞不達(dá)意,下面有些具體例子:
1.內(nèi)部類的定義:
嵌套類:在一個(gè)類中定義另外一個(gè)類,主要分為靜態(tài)嵌套類和非靜態(tài)嵌套類(又稱之為"內(nèi)部類")。內(nèi)部類的定義結(jié)構(gòu):
(1)在一個(gè)類中直接定義類。
(2)在一個(gè)方法中定義類。
(3)匿名內(nèi)部類。
2.外部類訪問內(nèi)部類
- 外部類訪問內(nèi)部類 例子
- 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();
- }
- }
- }
該段代碼定義了一個(gè)外部類Person 和一個(gè)內(nèi)部類Student, 其中內(nèi)部類Student中使用了各種修飾符修飾的變量和方法,從上面的例子可以看出外部類只能夠訪問嵌套類中修飾符為public、internal的字段、方法、屬性。調(diào)用外部類的 Show()方法運(yùn)行得到如下結(jié)果:
#p#
3.內(nèi)部類訪問外部類
- 內(nèi)部類訪問外部類 例子
- 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();
- }
- }
- }
- }
這段代碼同樣定義了一個(gè)外部類Person1 和一個(gè)內(nèi)部類Student,內(nèi)部類中的SetPer()調(diào)用了外部類中的方法,寫這段代碼我們可以發(fā)現(xiàn) 嵌套類可以訪問外部類的方法、屬性、字段而不受訪問修飾符的限制
4.內(nèi)部類的繼承
- 內(nèi)部類繼承例子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();
- }
- }
- }
內(nèi)部類繼承,上面的內(nèi)部類定義了父類,其中public virtual void Show() 使用virtual 修飾,可以用于子類重寫這個(gè)方法,看內(nèi)部類繼承子類是否能夠重寫這個(gè)方法。
- 內(nèi)部類繼承例子2
- namespace GameStatistical.Test.InnerClass
- {
- public class SubPerson:Person
- {
- public class SubStudent : Student
- {
- public override void Show()
- {
- base.Show();
- }
- }
- }
- }
上面的代碼重寫了Show() 這個(gè)方法,說明內(nèi)部類的繼承可以通過
5.反射內(nèi)部類
對(duì)于這段代碼,是從其他網(wǎng)站看到的,反射內(nèi)部類我們不能直接通過 "." 操作符直接來操作,而是通過 "+" 操作符。前面也提到過內(nèi)部類也是一種有效的管理命名空間的方法,這里也是普通類和內(nèi)部類的一點(diǎn)區(qū)別:
反射內(nèi)部類
- Activator.CreateInstance("GameStatistical.Test.InnerClass", "GameStatistical.Test.InnerClass.ReflectionPerson+Student");
反射普通類
- Activator.CreateInstance("GameStatistical.Test.InnerClass", "GameStatistical.Test.InnerClass.ReflectionPerson.Student");
在實(shí)際操作中,內(nèi)部類好像使用的比較少,這里也只是非常簡單的介紹,作為一個(gè)知識(shí)點(diǎn)總結(jié)起來。
文章標(biāo)題:解讀C#中內(nèi)部類的語法結(jié)構(gòu)
文章起源:http://www.5511xx.com/article/coopipo.html


咨詢
建站咨詢
