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

解讀C#中內部類的語法結構

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

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

51CTO推薦閱讀:C#內部類簡單分析

使用內部類有這樣幾個好處:

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

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

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

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

1.內部類的定義:

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

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

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

(3)匿名內部類。

2.外部類訪問內部類

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

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

#p#

3.內部類訪問外部類

  1. 內部類訪問外部類 例子  
  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 和一個內部類Student,內部類中的SetPer()調用了外部類中的方法,寫這段代碼我們可以發現 嵌套類可以訪問外部類的方法、屬性、字段而不受訪問修飾符的限制

4.內部類的繼承

  1. 內部類繼承例子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.  } 

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

  1. 內部類繼承例子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() 這個方法,說明內部類的繼承可以通過

5.反射內部類

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

反射內部類

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

反射普通類

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

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

【編輯推薦】

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

2024-06-26 12:59:29

C#代碼開發

2009-12-09 10:34:54

PHP基本語法結構

2009-08-26 18:00:07

C#內部類

2010-01-12 09:39:58

C++語言

2010-09-07 10:33:04

CSS

2009-06-11 13:08:29

Java內部類Java編程思想

2020-01-15 11:14:21

Java算法排序

2015-07-28 10:06:03

C#內部實現剖析

2011-07-21 15:44:33

Java內部類

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內部類外部類

2009-08-27 11:43:31

C#語法

2011-06-09 09:08:00

C#循環結構

2011-09-21 10:56:31

C#結構

2010-02-05 11:23:01

C++聲明語法

2009-08-18 12:52:33

C#枚舉類型

2009-08-27 16:18:47

C#類C#結構體

2023-10-19 13:24:00

Java工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99精品视频一区二区三区 | 欧美一区二区三区在线免费观看 | 亚洲国产免费 | 一级毛片免费看 | 欧美精品一区二区三区在线 | 国产一区二区三区免费观看视频 | 亚洲精品一区二区三区蜜桃久 | 一级黄色毛片免费 | www视频在线观看 | 欧美一区二区三区久久精品 | www.欧美.com| 81精品国产乱码久久久久久 | 狠狠操狠狠干 | 亚洲综合国产精品 | 欧美夜夜 | 97国产精品 | 91久久精品日日躁夜夜躁国产 | 伊久在线| 激情视频中文字幕 | 久久国产精品偷 | www.久久久久久久久久久 | www.av在线 | 碰碰视频 | 中文字幕黄色大片 | 99精品国产一区二区三区 | 亚洲视频在线观看 | 91九色在线观看 | 伊人网在线播放 | 国产韩国精品一区二区三区 | 国产高清在线精品一区二区三区 | 嫩草视频在线 | 欧美区在线 | 欧美日韩精品一区 | 91久久精品国产 | 亚洲精品亚洲人成人网 | 黄网免费看 | 国产激情毛片 | 丁香五月缴情综合网 | 成人欧美一区二区三区白人 | 懂色中文一区二区三区在线视频 | 日韩成人在线观看 |