欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于C#結(jié)構體 你需要知道的

 更新時間:2020年06月04日 15:52:17   作者:Tynam Yang  
這篇文章主要介紹了關于C#結(jié)構體的相關知識,以及使用方法,文中代碼非常詳細,幫助大家更好的參考和學習,感興趣的朋友可以了解下

結(jié)構體概念

  在C#中,結(jié)構體是值類型,一般適用于表示類似Point、Rectangle、Color的對象

  值類型能夠降低對堆的管理、使用。降低垃圾回收,表現(xiàn)出更好的性能。可是值類型也有不好的一面。會涉及到裝箱拆箱等操作

結(jié)構體聲明

  結(jié)構體聲明定義了一種新的數(shù)據(jù)類型,這個數(shù)據(jù)類型可以為程序包含一個以上的成員變量

  要定義一個結(jié)構,需要使用struct語句

聲明一個學校的結(jié)構

struct School
{
  public int name;
  public string head_master;
  public int class_number;
  public int student_number;
};

結(jié)構體的使用

using System;

struct School
{
  public int school_id;
  public string head_master;
  public int class_number;
  public int student_number;
};

public class testStructure
{
  public static void Main(string[] args)
  {
    School TianYangHighSchool; // 聲明一個學校

    // 學校詳細
    TianYangHighSchool.school_id = 12345;
    TianYangHighSchool.head_master = "Tynam.Yang";
    TianYangHighSchool.class_number = 6;
    TianYangHighSchool.student_number = 456;

    // 打印學校信息
    Console.WriteLine("田陽高中學校的學校id是:{0}," +
      "校長名字是:{1}," +
      "一共有{2}個教室," +
      "總共有{3}名學校",
      TianYangHighSchool.school_id,
      TianYangHighSchool.head_master,
      TianYangHighSchool.class_number,
      TianYangHighSchool.student_number);

    Console.ReadKey();
  }
}

運行結(jié)果

結(jié)構體特點

  結(jié)構體可以有方法,字段,索引器,屬性,操作符方法和事件

  結(jié)構體可以有定義的構造函數(shù),但不能是析構函數(shù)。但是不能為結(jié)構定義默認構造函數(shù)。默認構造函數(shù)是自動定義的,不能被更改

  與類不同,結(jié)構體不能繼承其他結(jié)構體或類

  結(jié)構體不能用作其他結(jié)構或類的基礎

  結(jié)構體可以實現(xiàn)一個或多個接口

  結(jié)構成員不能被指定為抽象,虛擬或受保護

  當使用New運算符創(chuàng)建一個struct對象時,它將調(diào)用相應的構造函數(shù)。 與類不同,可以在不使用New運算符的情況下實例化結(jié)構體

  如果不使用New運算符,則字段保持未分配,并且在所有字段初始化之前不能使用對象

結(jié)構體 VS 類

  結(jié)構體是值類型,存儲在棧上,類是引用類型,存儲在托管堆上,結(jié)構體在聲明的時候就已經(jīng)為其分配棧上的內(nèi)存了,而類需要用 new為其分配堆上面的內(nèi)存

  結(jié)構體是隱式密封的,不能用 sealed 和 abstract 修飾,結(jié)構體不能被繼承,類可以被繼承

  結(jié)構體中的實例字段只能聲明,不能賦值,而類沒有限制,結(jié)構體只聲明沒有用 new 進行初始化時,可以給他的實例字段賦值,而類不行

  結(jié)構體沒有析構函數(shù),結(jié)構體中的方法不能用 virtual 和 abstract 修飾,但是可以用 override 修飾,用來重寫父類的方法

  結(jié)構體不能顯示給出默認構造函數(shù)(無參數(shù)的構造),無論有沒有自定義構造,默認構造都隱式存在,而類中有自定義構造函數(shù)時,默認構造會被隱藏,要想調(diào)用默認構造,必須顯示給出默認構造

  結(jié)構體的自定義構造函數(shù)必須初始化所有的實例字段和沒有初始化的非靜態(tài)屬性,類沒有限制

結(jié)構與類的選擇

  堆棧的空間有限,對于大量的邏輯的對象,創(chuàng)建類要比創(chuàng)建結(jié)構好一些

  結(jié)構表示如點、矩形和顏色這樣的輕量對象,例如,如果聲明一個含有 1000 個點對象的數(shù)組,則將為引用每個對象分配附加的內(nèi)存。在此情況下,結(jié)構的成本較低

  在表現(xiàn)抽象和多級別的對象層次時,類是最好的選擇

  大多數(shù)情況下該類型只是一些數(shù)據(jù)時,結(jié)構時最佳的選擇體的使用

以上就是關于C#結(jié)構體 你需要知道的的詳細內(nèi)容,更多關于c#結(jié)構體的資料請關注腳本之家其它相關文章!

相關文章

  • C#使用semaphore來管理異步下載請求的方法

    C#使用semaphore來管理異步下載請求的方法

    這篇文章主要介紹了C#使用semaphore來管理異步下載請求的方法,涉及C#使用semaphore實現(xiàn)多線程管理的技巧,需要的朋友可以參考下
    2015-06-06
  • C#十五子游戲編寫代碼

    C#十五子游戲編寫代碼

    這篇文章主要為大家詳細介紹了C#十五子游戲的編寫代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • C#編程實現(xiàn)DataTable添加行的方法

    C#編程實現(xiàn)DataTable添加行的方法

    這篇文章主要介紹了C#編程實現(xiàn)DataTable添加行的方法,結(jié)合兩個實例形式分析了C#操作DataTable實現(xiàn)動態(tài)添加行的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • C#控制臺實現(xiàn)飛行棋游戲

    C#控制臺實現(xiàn)飛行棋游戲

    這篇文章主要為大家詳細介紹了C#控制臺實現(xiàn)飛行棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • c# 使用HtmlAgilityPack解析Html

    c# 使用HtmlAgilityPack解析Html

    這篇文章主要介紹了c# 如何使用HtmlAgilityPack解析Html,幫助大家利用c#進行爬蟲,感興趣的朋友可以了解下
    2020-12-12
  • C#隊列的簡單使用

    C#隊列的簡單使用

    隊列的特性很簡答,就是先進先出,一般利用數(shù)組來實現(xiàn),本文就介紹了C#隊列的簡單使用,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C#一個方法返回多個值示例

    C#一個方法返回多個值示例

    這篇文章主要介紹了C#一個方法返回多個值示例,需要的朋友可以參考下
    2014-02-02
  • c# StringBuilder.Replace 方法 (Char, Char, Int32, Int32)

    c# StringBuilder.Replace 方法 (Char, Char, Int32, Int32)

    c# StringBuilder.Replace 方法 (Char, Char, Int32, Int32)...
    2007-08-08
  • c# 連接access數(shù)據(jù)庫config配置

    c# 連接access數(shù)據(jù)庫config配置

    c# 連接access數(shù)據(jù)庫config配置,需要的朋友可以參考一下
    2013-02-02
  • C#多線程與異步的區(qū)別詳解

    C#多線程與異步的區(qū)別詳解

    多線程和異步操作兩者都可以達到避免調(diào)用線程阻塞的目的,從而提高軟件的可響應性。甚至有些時候我們就認為多線程和異步操作是等同的概念。但是,多線程和異步操作還是有一些區(qū)別的。而這些區(qū)別造成了使用多線程和異步操作的時機的區(qū)別
    2017-06-06

最新評論