日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
解讀C#中內(nèi)部類的語法結(jié)構(gòu)

最近在看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)部類

 
 
 
  1. 外部類訪問內(nèi)部類 例子
  2.  namespace GameStatistical.Test.InnerClass
  3.  {
  4.      public class Person
  5.      {
  6.          public class Student
  7.          {
  8.              public static int age;
  9.              internal static int height;
  10.              private static string sex;
  11.              public virtual void Show()
  12.             {
  13.                  Console.WriteLine("年齡:"+age);
  14.                  Console.WriteLine("身高:"+height);
  15.              }
  16.  
  17.              internal void Display()
  18.             {
  19.                  Console.WriteLine("internal");
  20.                 Console.WriteLine("年齡:" + age);
  21.                  Console.WriteLine("身高:" + height);
  22.              }
  23.          }
  24.  
  25.  
  26.          public void Show()
  27.          {
  28.              Student.age = 21;
  29.              Student.height = 75;
  30.              Student student = new Student();
  31.              student.Show();
  32.          }
  33.      }
  34.  }

該段代碼定義了一個(gè)外部類Person 和一個(gè)內(nèi)部類Student, 其中內(nèi)部類Student中使用了各種修飾符修飾的變量和方法,從上面的例子可以看出外部類只能夠訪問嵌套類中修飾符為public、internal的字段、方法、屬性。調(diào)用外部類的 Show()方法運(yùn)行得到如下結(jié)果:

#p#

3.內(nèi)部類訪問外部類

 
 
 
  1. 內(nèi)部類訪問外部類 例子
  2.  namespace GameStatistical.Test.InnerClass
  3.  {
  4.      public class Person1
  5.      {
  6.          private string name;
  7.  
  8.          public string Name
  9.          {
  10.              get { return name; }
  11.              set { name = value; }
  12.          }
  13.          private string sex;
  14.  
  15.          public string Sex
  16.          {
  17.              get { return sex; }
  18.              set { sex = value; }
  19.          }
  20.  
  21.          public void Show1()
  22.          {
  23.              Console.WriteLine(this.name + "==>" + this.sex);
  24.          }
  25.  
  26.          private static void Show2()
  27.          {
  28.              Console.WriteLine("===================>");
  29.          }
  30.  
  31.         internal void Show3()
  32.          {
  33.              Console.WriteLine(this.name + "==>" + this.sex);
  34.          }
  35.  
  36.  
  37.  
  38.          public class Student
  39.          {
  40.              public void SetPer(string name, string sex)
  41.              {
  42.                  Person1 p = new Person1();
  43.                  p.name = name;
  44.                  p.sex = sex;
  45.  
  46.                  p.Show3();
  47.                  p.Show1();
  48.              }
  49.  
  50.          }
  51.      }
  52.  }

這段代碼同樣定義了一個(gè)外部類Person1 和一個(gè)內(nèi)部類Student,內(nèi)部類中的SetPer()調(diào)用了外部類中的方法,寫這段代碼我們可以發(fā)現(xiàn) 嵌套類可以訪問外部類的方法、屬性、字段而不受訪問修飾符的限制

4.內(nèi)部類的繼承

 
 
 
  1. 內(nèi)部類繼承例子1
  2.  namespace GameStatistical.Test.InnerClass
  3.  {
  4.      public class Person
  5.      {
  6.          public class Student
  7.          {
  8.              public static int age;
  9.              internal static int height;
  10.              private static string sex;
  11.  
  12.              public virtual void Show()
  13.              {
  14.                  Console.WriteLine("年齡:"+age);
  15.                  Console.WriteLine("身高:"+height);
  16.              }
  17.  
  18.              internal void Display()
  19.              {
  20.                  Console.WriteLine("internal");
  21.                  Console.WriteLine("年齡:" + age);
  22.                  Console.WriteLine("身高:" + height);
  23.              }
  24.          }
  25.  
  26.  
  27.          public void Show()
  28.          {
  29.              Student.age = 21;
  30.              Student.height = 75;
  31.              Student student = new Student();
  32.              student.Show();
  33.              student.Display();
  34.          }
  35.      }
  36.  }

內(nèi)部類繼承,上面的內(nèi)部類定義了父類,其中public virtual void Show() 使用virtual 修飾,可以用于子類重寫這個(gè)方法,看內(nèi)部類繼承子類是否能夠重寫這個(gè)方法。

 
 
 
  1. 內(nèi)部類繼承例子2
  2.  namespace GameStatistical.Test.InnerClass
  3.  {
  4.      public class SubPerson:Person
  5.      {
  6.          public class SubStudent : Student
  7.          {
  8.              public override void Show()
  9.              {
  10.                  base.Show();
  11.              }
  12.          }
  13.      }
  14.  }

上面的代碼重寫了Show() 這個(gè)方法,說明內(nèi)部類的繼承可以通過

5.反射內(nèi)部類

對(duì)于這段代碼,是從其他網(wǎng)站看到的,反射內(nèi)部類我們不能直接通過 "." 操作符直接來操作,而是通過 "+" 操作符。前面也提到過內(nèi)部類也是一種有效的管理命名空間的方法,這里也是普通類和內(nèi)部類的一點(diǎn)區(qū)別:

反射內(nèi)部類

 
 
 
  1. Activator.CreateInstance("GameStatistical.Test.InnerClass", "GameStatistical.Test.InnerClass.ReflectionPerson+Student");
  2.  

反射普通類

 
 
 
  1. Activator.CreateInstance("GameStatistical.Test.InnerClass", "GameStatistical.Test.InnerClass.ReflectionPerson.Student");
  2.  

在實(shí)際操作中,內(nèi)部類好像使用的比較少,這里也只是非常簡單的介紹,作為一個(gè)知識(shí)點(diǎn)總結(jié)起來。


文章標(biāo)題:解讀C#中內(nèi)部類的語法結(jié)構(gòu)
文章起源:http://www.5511xx.com/article/coopipo.html