<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      不可不知的C#基礎 2. -–從 struct 和 class的異同 說開去

      我知道很多人都討論過這個問題, 多我一個不多, 少我一個不少.

      最近有人又問到這個問題, 所以想再說說. 萬丈高樓平地起, 地基很重要. 懂了的人不要嫌羅嗦, 歡迎補充或者糾正.

      從起源/定義說起

      Struct 從C 的時代就已經有了(向丹尼斯.里奇致敬), 它是Structure 的縮寫 -- 就是結構的意思. 它是一種最初級的數據結構, 它包含一到多個相同類型或不同類型的值或者變量. 它就像是一個存儲數據的"包".

       

      Class(類) 是有了面向對象概念之后才有的, 它"是創建對象的藍圖,描述了所創建的對象共同的屬性和方法".

       

      從它們被創立的用途可以看出Class 比Struct 負擔了更大的使命.

      類從出生的那天就被賦予了一個偉大的使命: 模擬真實世界的行為, 擁有繼承和多態兩種利器.

      Struct 到了C#這個領域中有了一個進化, 它甚至可以實現接口(當然,這個也是C時代沒有的東西), 在本文中會有一個簡單的介紹.

       

      值類型 VS 引用類型

      在.net 世界中, System.Object "支持 .NET Framework 類層次結構中的所有類,并為派生類提供低級別服務。 這是 .NET Framework 中所有類的最終基類;它是類型層次結構的根。" 從Object再衍生出所有類、結構、枚舉和委托。
      看看下面這個圖對net中兩大類型的描述, -- 當然還有一種"指針類型",在這里我們不予討論.
       
       
       

      chappell5fig01

       

       

      Struct 是屬于值類型這個陣容, 而所有class 都是引用類型.

      這意味著什么?

       

      當我們使用等號"賦值"時, 對于Struct而言就是將同樣的值復制給另一個變量; 而對于Class而言就只是將它們的名字指向同一個對象.

       

      看下面的實例:

      class FooClass
      {
      public int FooValue;
      }
      struct FooStruct
      {
      public int FooValue;
      }


      class Program
      {

      static void Main(string[] args)
      {
      FooClass classObj = new FooClass();

      classObj.FooValue = 0;

      FooClass classObj2 = classObj;

      classObj2.FooValue = 1;

      FooStruct structObj = new FooStruct();

      structObj.FooValue = 0;

      FooStruct structObj2 = structObj;

      structObj2.FooValue = 1;

      }

      }
      再最后設個斷點, 運行后取值:
       
      ScreenShot047
       
      structObj2 在初始時, 會創建一個全新的副本, 然后獲取structObj 的所有數值;
      classObj2 在初始時, 只是指向了classObj. 這就是值類型和引用類型的一個區別. 當修改classObj 或者 classObj2 時, 修改的是同一部分內存.

      Struct實現接口

      前面提到了Struct可以實現接口, 下面我們引用一個實例:

      interface IPromotion
      {

      void promote();

      }

      struct Employee : IPromotion
      {

      public string Name;

      public int JobGrade;

      public void promote()
      {

      JobGrade++;

      }

      public Employee(string name, int jobGrade)
      {

      this.Name = name;

      this.JobGrade = jobGrade;

      }

      public override string ToString()
      {

      return string.Format("{0} ({1})", Name, JobGrade);

      }

      }

      class Program
      {

      static void Main(string[] args)
      {

      Employee employee = new Employee("Cool Guy", 65);

      IPromotion p = employee;

      Console.WriteLine(employee);

      p.promote();

      Console.WriteLine(employee);

      }

      }
      一旦增加了這個功能, 我們就可以在應用Struct之前, 給予其一些接口的定義. 使一類的struct 在形式上保持一致.
       

      不同的用途

      使用中在struct 和 class 兩者間該選誰?

      我們在編程中要實現某種數據結構時, 絕大部分情況下我們會選擇class -- 因為它的強大和特定的使命. 但是當我們要傳遞或存儲一些小數據結構時,可以考慮struct.

      Net framework 下有很多已經定義好了的struct例如:

      System.Drawing.Rectangle
      System.Drawing.Color
      System.Drawing.Point

      使用時要記住struct的特性.

       

      本文來自于喜樂的ASP.NET(Alex Song) 轉貼請注明出處

      posted @ 2011-10-15 03:17  擁有的都是恩典  閱讀(4509)  評論(6)    收藏  舉報
      主站蜘蛛池模板: 南漳县| 一个色综合色综合色综合| 亚洲国产一成人久久精品| 91精品国产91热久久久久福利| 聊城市| 在线免费播放av观看| 久久精品国产亚洲av电影| 灵武市| 亚洲第一香蕉视频啪啪爽| 忘忧草在线社区www中国中文| 国产高清一区二区不卡| 黄色三级亚洲男人的天堂| 日本一卡2卡3卡4卡无卡免费| 无码人妻一区二区三区精品视频| 成年女人免费v片| 亚洲区综合中文字幕日日| 亚洲成av人片无码天堂下载| 亚洲一区在线成人av| av在线播放无码线| 久久国产成人精品av| 亚洲av色精品一区二区| 午夜免费无码福利视频麻豆| AV人摸人人人澡人人超碰| 日本真人做爰免费的视频| 日韩精品视频一二三四区| 最新高清无码专区| 久久久久久久久久久久中文字幕| 少妇人妻偷人精品免费视频| 国产亚洲一级特黄大片在线| 亚洲综合一区国产精品| 亚洲中文字幕无码中字| 欧美精欧美乱码一二三四区| 午夜精品久久久久久久久| 人与禽交av在线播放| 无套中出极品少妇白浆 | 给我免费观看片在线| 人妻丰满熟妇av无码处处不卡| 色婷婷五月综合亚洲小说| 久久精品国产99麻豆蜜月| a级国产乱理伦片在线观看al| 国产情侣激情在线对白|