最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

輕松學(xué)習(xí)C#的結(jié)構(gòu)和類

 更新時間:2022年05月06日 14:47:49   作者:丿木呈廣予口貝  
輕松學(xué)習(xí)C#的結(jié)構(gòu)和類,對C#的結(jié)構(gòu)和類感興趣的朋友可以參考本篇文章,幫助大家更靈活的運用C#的結(jié)構(gòu)和類

類和結(jié)構(gòu)是.NET Framework中的同樣類型系統(tǒng)的兩種基本構(gòu)造。兩者在本質(zhì)上都屬于數(shù)據(jù)結(jié)構(gòu),封裝這一組整體作為一個邏輯單位的數(shù)據(jù)和行為。數(shù)據(jù)和行為是該類或結(jié)構(gòu)的“成員”,它們包含著各自的方法,屬性和事件等。

結(jié)構(gòu)

結(jié)構(gòu)是C#程序員用來定義自己的值類型的最普遍的機制。結(jié)構(gòu)比枚舉更強大,因為它提供方法,字段,操作符和訪問控制等。

結(jié)構(gòu)與類很相似,都表示可以包含數(shù)據(jù)成員和函數(shù)成員的數(shù)據(jù)結(jié)構(gòu)。但是,與類不同,結(jié)構(gòu)是一種值類型,并且不需要堆分配。結(jié)構(gòu)類型的變量直接包含了該結(jié)構(gòu)的數(shù)據(jù),而類類型的變量所包含的只是對相應(yīng)數(shù)據(jù)的一個引用(被引用的數(shù)據(jù)稱為“對象”)。

結(jié)構(gòu)對于具有值語義的小型數(shù)據(jù)結(jié)構(gòu)尤為有用。復(fù)數(shù),坐標系中的點或字典中的“鍵-值”對都是結(jié)構(gòu)的典型示例。這些數(shù)據(jù)結(jié)構(gòu)的關(guān)鍵之處在于:他們只是少量數(shù)據(jù)成員,不要求使用繼承或引用標識,而且它們使用較方便(賦值時直接復(fù)制值而不是復(fù)制它的引用)。

結(jié)構(gòu)的聲明通過關(guān)鍵字struct來實現(xiàn),聲明格式為:

修飾符   struct   結(jié)構(gòu)名
         {
                 結(jié)構(gòu)主體
          };

結(jié)構(gòu)聲明包含一組可選額特性,后跟一組可選的結(jié)構(gòu)修飾符,再跟關(guān)鍵字struct和一個用于命名結(jié)構(gòu)的標識符,然后跟一個可選的結(jié)構(gòu)接口規(guī)范,最后跟一個結(jié)構(gòu)主體,根據(jù)需要后面還可以跟一個分號。

結(jié)構(gòu)聲明可以根據(jù)需要包含一個結(jié)構(gòu)修飾符:new,public,protected,internal,private

結(jié)構(gòu)的使用

為結(jié)構(gòu)定義默認(無參數(shù))構(gòu)造函數(shù)是錯誤的,在結(jié)構(gòu)體重初始化實例字段也是錯誤的。初始化結(jié)構(gòu)成員可通過兩種形式來完成:一是使用參數(shù)化構(gòu)造函數(shù),二是在聲明結(jié)構(gòu)后分別訪問成員。對于任何私有成員或以其他方式設(shè)置為不可訪問的成員,只能在構(gòu)造函數(shù)中進行初始化。
如果使用new運算符創(chuàng)建結(jié)構(gòu)對象,則會創(chuàng)建該結(jié)構(gòu)對象,并調(diào)用適當(dāng)?shù)臉?gòu)造函數(shù)。與類不同的是,結(jié)構(gòu)的實例化可以不使用new運算符。在此情況下不存在構(gòu)造函數(shù)的調(diào)用,因而可以提高分配效率。但是,在初始化所有字段之前,字段將保持未賦值狀態(tài)且對象不可用。
當(dāng)結(jié)構(gòu)包含引用類型作為成員時,必須顯式調(diào)用調(diào)用該成員的默認構(gòu)造函數(shù),否則該成員將保持未賦值狀態(tài)且該結(jié)構(gòu)不可用。
例題,創(chuàng)建一個結(jié)構(gòu),分析結(jié)構(gòu)的使用

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace Text 
{ 
 struct Sum//定義的一個結(jié)構(gòu) 
 { 
  public int sum(int a, int b)//結(jié)構(gòu)包含的方法 
  { 
   return a + b; 
  } 
 } 
 class Program 
 { 
  static void Main(string[] args) 
  { 
   int p = 10; 
   int q = 10; 
   Sum t = new Sum();//創(chuàng)建結(jié)構(gòu)對象t 
   Console.Write("{0}+{1}=",p,q); 
   Console.Write(t.sum(p,q));//調(diào)用結(jié)構(gòu)中的方法 
   Console.ReadLine(); 
  } 
 } 
}

輸出的結(jié)果為:10+10=20

類是一種數(shù)據(jù)結(jié)構(gòu),它可以封裝數(shù)據(jù)成員(常量和字段),函數(shù)成員(方法,屬性,事件,索引器,運算符,實例構(gòu)造函數(shù),靜態(tài)構(gòu)造函數(shù)和析構(gòu)函數(shù))和其他的類(嵌套類型)。類是創(chuàng)建對象的模板。C#的一切類型都是類,所有的語句都必須位于類內(nèi),不存在任何處于類外的語句。因此,類是C#語言的核心和基本構(gòu)成模塊。類類型支持繼承,繼承是一種機制,可使派生類對基類進行擴展和專用化。
類聲明中指定的基類可以是構(gòu)造類類型。基類本身不能是類型形參,但在其作用域中可以包含類型形參。
在OOP方法中,類是對現(xiàn)實世界的一種高度抽象與概括,而對象則是類的一個實例,對象一定具有其屬類的共同特征與行為規(guī)則,當(dāng)然一個對象還可以具有其屬類未曾規(guī)定的特征和行為規(guī)則。這一點和現(xiàn)實生活是相同的,這樣的模擬和抽象比較符合人們的思維習(xí)慣,這也正是OOP方法具有強大生命力,能夠獲得越來越多的軟件工作者歡迎并得到眾多計算機開發(fā)商支持的一個基本原因。
總之,從程序設(shè)計者的角度觀察,類是一個數(shù)據(jù)模式和若干個程序過程,經(jīng)封裝而形成的一個整體,是使用信息技術(shù)對現(xiàn)實世界的一種模擬與抽象。而對象則是類的一個實例,從程序設(shè)計語言來說,對象可以被理解為一個類賦值的結(jié)果。對象是OOP方法中組成程序的一種構(gòu)件。

C#中類的聲明是通過class關(guān)鍵字實例的,格式為:

修飾符   class 類名: 基類或接口
        {
             類體
        }

其中“修飾符”,": 基類或接口"為可選項。類的修飾符可以是以下幾種之一或者它們的組合(在類的聲明()中同一修飾符不允許出現(xiàn)多次)。

(1)new:僅允許在嵌套類聲明時使用,表明類中隱藏了由基類中繼承而來的,與基類中同名的成員
(2)public:表示不限制對該類的訪問
(3)internal:只有其所在類才能訪問
(4)private:只有對.NET中的應(yīng)用程序或庫才能訪問
(5)abstract:抽象類,不允許建立類的實例
(6)sealed:密封類,不允許被繼承

使用new關(guān)鍵字可以建立類的一個實例:

class A 
 { 
 } 
 class B 
 { 
  void M() 
  { 
   A a = new A(); 
  } 
 }
   

類的繼承聲明:C#語言中只支持單繼承

class A 
 { 
 } 
 class B : A 
 { 
 }

(1)、構(gòu)造函數(shù)和析構(gòu)函數(shù)

C#提供了更好的機制來增強程序的安全性。C#編譯器具有嚴格的類型安全檢查功能,它幾乎能找出程序中所有的語法問題。但是,程序通過了編譯檢查并不表示錯誤已經(jīng)不存在了。
C#語言充分考慮了程序錯誤的出現(xiàn)并很好的予以解決,即把對象的初始化工作放在構(gòu)造函數(shù)中,把清除工作放在析構(gòu)函數(shù)中。當(dāng)對象被創(chuàng)建時,構(gòu)造函數(shù)被自動執(zhí)行。當(dāng)對象消亡時,析構(gòu)函數(shù)自動執(zhí)行。
構(gòu)造函數(shù)的名字不能隨便起,必須讓編譯器認得出才可以被自動執(zhí)行。它的命名方法既簡單又合理:讓構(gòu)造函數(shù)與類名相同。除了名字之外,構(gòu)造函數(shù)的另一個特別之處是沒有返回值類型,這是與返回值類型為void的函數(shù)不同。
析構(gòu)函數(shù)是實現(xiàn)銷毀一個類的實例的方法成員。析構(gòu)函數(shù)不能有參數(shù),不能有任何修飾符而且不能被調(diào)用。析構(gòu)函數(shù)與構(gòu)造函數(shù)目的不同,特在析構(gòu)函數(shù)前加前綴”~“以示區(qū)別。
構(gòu)造函數(shù)和析構(gòu)函數(shù)雖然是一個類中形式上較簡單的函數(shù)。但它們的使用決非看上去那么簡單,因此靈活而正確地使用構(gòu)造函數(shù)和析構(gòu)函數(shù)能夠幫助用戶更好的理解CLR的內(nèi)存管理機制以及更好的管理系統(tǒng)中的資源。

(2)、類與對象

類是具有相同屬性和服務(wù)的一組對象的集合。它為屬于該類的所有對象提供了統(tǒng)一的抽象描述,其內(nèi)部包括屬性和服務(wù)兩個主要部分。在面向?qū)ο蟮木幊陶Z言中,類是一個獨立的程序單位,它有一個類名,類名包括屬性說明和服務(wù)說明兩個主要部分。
對象時系統(tǒng)中用來描述客觀事物的一個實體,是構(gòu)成系統(tǒng)的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務(wù)組成。從更抽象的角度來說,對象是問題域或?qū)崿F(xiàn)域中某些事物的一個抽象,反映了該事物在系統(tǒng)中需要保存的信息和發(fā)揮的作用,是一組屬性和有權(quán)對這些屬性進行操作的一組服務(wù)的封裝體。客觀世界是由對象和對象之間的聯(lián)系組成的。
類和對象的關(guān)系就如模具和鑄件的關(guān)系,類的實例化的結(jié)果就是對象。而對一類對象的抽象就是類。類描述了一組有相同特性(屬性)和相同行為(方法)的對象。
例題,創(chuàng)建類A并且在另一個類中調(diào)用類A的方法Sum

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace Text 
{ 
 class A//創(chuàng)建的類 
 { 
  public int Sum(int i, int j)//被類封裝的方法 
  { 
   return i + j; 
  } 
 } 
 class Program 
 { 
  static void Main(string[] args) 
  { 
   A a = new A();//創(chuàng)建的類A的對象a 
   int p = 10; 
   int q = 10; 
   Console.WriteLine(a.Sum(p,q));//調(diào)用類A的Sum方法 
   Console.ReadLine(); 
  } 
 } 
  
} 

輸出的結(jié)果為:20

以上就是關(guān)于C#的結(jié)構(gòu)和類的全部知識點,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量三

    C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量三

    C#語言類型系統(tǒng)提出的一個核心概念裝箱(boxing)拆箱(unboxing)。裝箱和取消裝箱的概念是C#的類型系統(tǒng)的核心。它在“值類型”和“引用類型”之間的架起了一座橋梁,使得任何“值類型”的值都可以轉(zhuǎn)換為object類型的值,反過來轉(zhuǎn)換也可以。
    2015-10-10
  • 輕松學(xué)習(xí)C#的預(yù)定義數(shù)據(jù)類型

    輕松學(xué)習(xí)C#的預(yù)定義數(shù)據(jù)類型

    輕松學(xué)習(xí)C#的預(yù)定義數(shù)據(jù)類型,C#的預(yù)定義數(shù)據(jù)類型包括兩種,一種是值類型,一種是引用類型,需要的朋友可以參考下
    2015-11-11
  • C#迷你猜數(shù)實例分析

    C#迷你猜數(shù)實例分析

    這篇文章主要介紹了C#迷你猜數(shù),實例分析C#操作數(shù)字及數(shù)組的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • C#啟動和停止windows服務(wù)的實例代碼

    C#啟動和停止windows服務(wù)的實例代碼

    這篇文章介紹了C#啟動和停止windows服務(wù)的實例代碼,有需要的朋友可以參考一下
    2013-09-09
  • 詳解C# WinForm如何優(yōu)雅的處理異常

    詳解C# WinForm如何優(yōu)雅的處理異常

    在運行、調(diào)試代碼的時候,會遇到一些異常情況,很多時候我們代碼寫得足夠健壯,所以出現(xiàn)的概率比較低,但如果一出現(xiàn),我們又沒處理好,就可能會導(dǎo)致程序的崩潰、退出。本文主要介紹了WinForm處理異常的方法,需要的可以參考下
    2022-09-09
  • C#操作windows注冊表的方法

    C#操作windows注冊表的方法

    這篇文章主要介紹了C#操作windows注冊表的方法,涉及C#針對注冊表的讀取與寫入技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C# 格式化字符首字母大寫的方法

    C# 格式化字符首字母大寫的方法

    這篇文章介紹了C# 格式化字符首字母大寫的方法,有需要的朋友可以參考一下
    2013-08-08
  • WinForm實現(xiàn)同時讓兩個窗體有激活效果的特效實例

    WinForm實現(xiàn)同時讓兩個窗體有激活效果的特效實例

    這篇文章主要介紹了WinForm實現(xiàn)同時讓兩個窗體有激活效果的特效實例,基于windows api實現(xiàn)一個窗體激活的時候給另外一個發(fā)消息的特效,在進行C#項目開發(fā)時有一定的實用價值,需要的朋友可以參考下
    2014-09-09
  • C#使用Win2D在UWP程序中實現(xiàn)2D繪圖

    C#使用Win2D在UWP程序中實現(xiàn)2D繪圖

    這篇文章介紹了C#使用Win2D在UWP程序中實現(xiàn)2D繪圖的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#復(fù)合模式(Composite Pattern)實例教程

    C#復(fù)合模式(Composite Pattern)實例教程

    這篇文章主要介紹了C#復(fù)合模式(Composite Pattern),以實例形式講述了復(fù)合模式在樹形結(jié)構(gòu)中的應(yīng)用,需要的朋友可以參考下
    2014-09-09

最新評論

长垣县| 神池县| 南汇区| 苗栗县| 罗源县| 武夷山市| 石林| 洪泽县| 阿拉善左旗| 石泉县| 嘉黎县| 山西省| 三原县| 安国市| 皋兰县| 敦煌市| 克拉玛依市| 桐庐县| 体育| 科技| 马山县| 安图县| 榆社县| 时尚| 尤溪县| 青河县| 陕西省| 桂阳县| 罗田县| 宁海县| 永胜县| 含山县| 武胜县| 丰城市| 金川县| 海城市| 黑水县| 宁南县| 黄浦区| 镇原县| 湟中县|