成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解讀C#中內(nèi)部類的語法結構

開發(fā) 后端
文章簡單介紹了C#中的內(nèi)部類,C#內(nèi)部類能夠使用外部類定義的類型和靜態(tài)方法,但是不能直接使用外部類的實例方法,本文也結合實例分析了C#中內(nèi)部類的使用。

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

51CTO推薦閱讀:C#內(nèi)部類簡單分析

使用內(nèi)部類有這樣幾個好處:

(1)抽象外部類的某一狀態(tài)下的行為,隱藏實現(xiàn),通過修改該內(nèi)的訪問修飾符,可以設置僅有外部類可以訪問該類。

(2)擴展了命名空間,可以將外部類的類名作為內(nèi)部類的一個命名空間(這里只是相當于,但不是真正的命名空間)。

(3)內(nèi)部類可以當作外部類的一個擴展,可以活的更好的封裝。

上面的這些特點胡亂的總結了一下,可能有些詞不達意,下面有些具體例子:

1.內(nèi)部類的定義:

嵌套類:在一個類中定義另外一個類,主要分為靜態(tài)嵌套類和非靜態(tài)嵌套類(又稱之為"內(nèi)部類")。內(nèi)部類的定義結構:

(1)在一個類中直接定義類。

(2)在一個方法中定義類。

(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.  
  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.          }  
  34.      }  
  35.  } 

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

#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.  } 

這段代碼同樣定義了一個外部類Person1 和一個內(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 修飾,可以用于子類重寫這個方法,看內(nèi)部類繼承子類是否能夠重寫這個方法。

  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() 這個方法,說明內(nèi)部類的繼承可以通過

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

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

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

【編輯推薦】

  1. C#內(nèi)部類簡單分析 
  2. 介紹嵌套類和內(nèi)部類
  3. Java編程中的內(nèi)部類 
責任編輯:王曉東 來源: 博客園
相關推薦

2024-06-26 12:59:29

C#代碼開發(fā)

2009-12-09 10:34:54

PHP基本語法結構

2009-08-26 18:00:07

C#內(nèi)部類

2010-01-12 09:39:58

C++語言

2010-09-07 10:33:04

CSS

2009-06-11 13:08:29

Java內(nèi)部類Java編程思想

2020-01-15 11:14:21

Java算法排序

2015-07-28 10:06:03

C#內(nèi)部實現(xiàn)剖析

2011-07-21 15:44:33

Java內(nèi)部類

2009-08-18 17:17:05

C#局部類型

2009-08-19 15:38:59

C#代碼

2014-03-11 11:35:00

.NETC#

2020-12-14 10:23:23

Java內(nèi)部類外部類

2009-08-27 11:43:31

C#語法

2011-06-09 09:08:00

C#循環(huán)結構

2011-09-21 10:56:31

C#結構

2010-02-05 11:23:01

C++聲明語法

2009-08-27 16:18:47

C#類C#結構體

2009-08-18 12:52:33

C#枚舉類型

2023-10-19 13:24:00

Java工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 东京久久| 中文字幕免费视频 | 爱爱小视频 | 国产精品福利视频 | 看片网站在线 | 日韩免费视频一区二区 | 黄色国产在线视频 | 国产欧美性成人精品午夜 | 日韩综合一区 | 蜜臀久久99精品久久久久野外 | 久久午夜国产精品www忘忧草 | 久久99精品久久久久久国产越南 | 美国黄色毛片 | 日本色高清 | 久久国产区 | 中文字幕一区二区三区四区 | 国产成人99久久亚洲综合精品 | 久草免费在线视频 | 日本亚洲欧美 | 亚洲毛片在线观看 | 中文字幕免费在线 | 国产高清视频在线播放 | 97精品视频在线 | 国产日韩欧美一区二区 | 中文字幕日韩欧美一区二区三区 | 国产色99精品9i | 一区二区日韩 | 欧美一区二区黄 | 麻豆国产一区二区三区四区 | 欧美成人性生活 | 国产真实精品久久二三区 | 国产成人在线一区二区 | 在线成人| 欧美日韩在线视频一区二区 | 精品国产一区二区三区免费 | 久久久久综合 | www日韩高清 | 日本一区二区三区在线观看 | 99精品视频一区二区三区 | 黄色毛片免费视频 | 亚洲精品 在线播放 |