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

c# Struct的一些問(wèn)題分析

 更新時(shí)間:2021年06月21日 17:02:43   作者:舒碧  
在 C# 中,結(jié)構(gòu)體是值類型數(shù)據(jù)結(jié)構(gòu)。它使得一個(gè)單一變量可以存儲(chǔ)各種數(shù)據(jù)類型的相關(guān)數(shù)據(jù)。struct 關(guān)鍵字用于創(chuàng)建結(jié)構(gòu)體。結(jié)構(gòu)體是用來(lái)代表一個(gè)記錄。

Struct的理論看過(guò)好一些,可是工作上基本沒(méi)有應(yīng)用過(guò),Class倒處處都有。難道Struct就沒(méi)有什么使用價(jià)值嗎?搜了一下如何在類和結(jié)構(gòu)中做出選擇?

✔️ 如果類型的實(shí)例很小且通常壽命很短或通常嵌入其他對(duì)象中,請(qǐng)考慮定義結(jié)構(gòu)而不是類。

❌ 避免定義結(jié)構(gòu),除非該類型具有以下所有特征:

它在邏輯上表示單個(gè)值,類似于原始類型(int,double等)。

它的實(shí)例大小低于 16 字節(jié)。

它是不可變的。

它不必經(jīng)常裝箱。

在開(kāi)發(fā)軟件時(shí),常常會(huì)有頁(yè)面彈窗,而主頁(yè)面經(jīng)常需要傳一些參數(shù)到窗體里面,窗體也只是用這些參數(shù)來(lái)搜出其他數(shù)據(jù)展示,或進(jìn)行數(shù)據(jù)保存時(shí)使用,也就是只讀那些入?yún)ⅰkm然通過(guò)構(gòu)造函數(shù)傳參,可以傳多個(gè)參數(shù),但一般多個(gè)參數(shù)還是封裝為一個(gè)整體較好,如果這些參數(shù)在業(yè)務(wù)上可以看成一個(gè)小的邏輯單元,封裝成Struct應(yīng)該更好。

eg:函數(shù)傳參,struct會(huì)多復(fù)制一遍,所以加上ref。

using System;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private FundStruct s_fundStruct;

        public Form1()
        {
            InitializeComponent();
        }
      
        public Form1(ref FundStruct fundStruct)
        {
            InitializeComponent();
            s_fundStruct = fundStruct;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.textBox1.Text = s_fundStruct.Code;
            this.textBox2.Text = s_fundStruct.ShortName;
            ...
        }
    }

    public struct FundStruct
    {
        /// <summary>
        /// 編碼
        /// </summary>
        internal readonly string Code;
        /// <summary>
        /// 內(nèi)碼編號(hào)
        /// </summary>
        internal readonly int Number;
        /// <summary>
        /// 簡(jiǎn)稱
        /// </summary>
        internal readonly string ShortName;
        /// <summary>
        /// 全稱
        /// </summary>
        internal readonly string LongName;

        internal FundStruct(string code, int number, string shortName, string longName)
        {
            Code = code ?? throw new ArgumentNullException(nameof(code));
            Number = number;
            ShortName = shortName ?? throw new ArgumentNullException(nameof(shortName));
            LongName = longName ?? throw new ArgumentNullException(nameof(longName));
        }
    }
}

與類的區(qū)別:

C# 中結(jié)構(gòu)類型和類類型在語(yǔ)法上非常相似,他們都是一種數(shù)據(jù)結(jié)構(gòu),都可以包括數(shù)據(jù)成員和方法成員。

結(jié)構(gòu)和類的區(qū)別:

1、結(jié)構(gòu)是值類型,它在棧中分配空間;而類是引用類型,它在堆中分配空間,棧中保存的只是引用。
2、結(jié)構(gòu)類型直接存儲(chǔ)成員數(shù)據(jù),讓其他類的數(shù)據(jù)位于堆中,位于棧中的變量保存的是指向堆中數(shù)據(jù)對(duì)象的引用。

C# 中的簡(jiǎn)單類型,如int、double、bool等都是結(jié)構(gòu)類型。如果需要的話,甚至可以使用結(jié)構(gòu)類型結(jié)合運(yùn)算符運(yùn)算重載,再為 C# 語(yǔ)言創(chuàng)建出一種新的值類型來(lái)。

由于結(jié)構(gòu)是值類型,并且直接存儲(chǔ)數(shù)據(jù),因此在一個(gè)對(duì)象的主要成員為數(shù)據(jù)且數(shù)據(jù)量不大的情況下,使用結(jié)構(gòu)會(huì)帶來(lái)更好的性能。

因?yàn)榻Y(jié)構(gòu)是值類型,因此在為結(jié)構(gòu)分配內(nèi)存,或者當(dāng)結(jié)構(gòu)超出了作用域被刪除時(shí),性能會(huì)非常好,因?yàn)樗麄儗?nèi)聯(lián)或者保存在堆棧中。當(dāng)把一個(gè)結(jié)構(gòu)類型的變量賦值給另一個(gè)結(jié)構(gòu)時(shí),對(duì)性能的影響取決于結(jié)構(gòu)的大小,如果結(jié)構(gòu)的數(shù)據(jù)成員非常多而且復(fù)雜,就會(huì)造成損失,接下來(lái)使用一段代碼來(lái)說(shuō)明這個(gè)問(wèn)題。

結(jié)構(gòu)和類的適用場(chǎng)合分析:

1、當(dāng)堆棧的空間很有限,且有大量的邏輯對(duì)象時(shí),創(chuàng)建類要比創(chuàng)建結(jié)構(gòu)好一些;
2、對(duì)于點(diǎn)、矩形和顏色這樣的輕量對(duì)象,假如要聲明一個(gè)含有許多個(gè)顏色對(duì)象的數(shù)組,則CLR需要為每個(gè)對(duì)象分配內(nèi)存,在這種情況下,使用結(jié)構(gòu)的成本較低;
3、在表現(xiàn)抽象和多級(jí)別的對(duì)象層次時(shí),類是最好的選擇,因?yàn)榻Y(jié)構(gòu)不支持繼承。
4、大多數(shù)情況下,目標(biāo)類型只是含有一些數(shù)據(jù),或者以數(shù)據(jù)為主。

以上就是c# Struct的一些問(wèn)題分析的詳細(xì)內(nèi)容,更多關(guān)于c# Struct的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#使用TreeView控件實(shí)現(xiàn)的二叉樹(shù)泛型節(jié)點(diǎn)類及其方法

    C#使用TreeView控件實(shí)現(xiàn)的二叉樹(shù)泛型節(jié)點(diǎn)類及其方法

    TreeView?控件在?C#?中主要用于顯示分層結(jié)構(gòu)的數(shù)據(jù),這通常是一個(gè)文件系統(tǒng)的表示,但也可以是任何具有父子關(guān)系的數(shù)據(jù)集合,本文給大家介紹了C#使用TreeView控件實(shí)現(xiàn)的二叉樹(shù)泛型節(jié)點(diǎn)類及其方法,需要的朋友可以參考下
    2024-03-03
  • WCF入門(mén)教程之Windows通訊接口

    WCF入門(mén)教程之Windows通訊接口

    這篇文章介紹了WCF入門(mén)教程之Windows通訊接口,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C# 在項(xiàng)目中引用x86 x64的非托管代碼的方法

    C# 在項(xiàng)目中引用x86 x64的非托管代碼的方法

    使用宏最簡(jiǎn)單的方法是編譯兩個(gè)版本,編譯多個(gè)版本可以點(diǎn)擊配置管理器,然后創(chuàng)建x86和x64,然后版本添加宏,這樣就可以判斷宏來(lái)使用不同的dll。這篇文章主要介紹了C# 在項(xiàng)目中引用x86 x64的非托管代碼的方法,需要的朋友可以參考下
    2018-03-03
  • c#實(shí)現(xiàn)pdf的另存為功能

    c#實(shí)現(xiàn)pdf的另存為功能

    今天跟大家分享一個(gè)實(shí)現(xiàn)PDF另存為的效果,是調(diào)用Acrobat SDK的JavaScript實(shí)現(xiàn)的,需要的朋友可以參考下
    2014-03-03
  • C# Csv實(shí)現(xiàn)基本的讀寫(xiě)和轉(zhuǎn)換DataTable

    C# Csv實(shí)現(xiàn)基本的讀寫(xiě)和轉(zhuǎn)換DataTable

    本文主要介紹了C# Csv實(shí)現(xiàn)基本的讀寫(xiě)和轉(zhuǎn)換DataTable,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 利用WPF實(shí)現(xiàn)Windows屏保的制作

    利用WPF實(shí)現(xiàn)Windows屏保的制作

    屏保程序的本質(zhì)上就是一個(gè)Win32?窗口應(yīng)用程序。本文將利用WPF實(shí)現(xiàn)Windows屏保的制作,文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們學(xué)習(xí)WPF有一定幫助,感興趣的可以了解一下
    2022-07-07
  • C/C++ 傳遞動(dòng)態(tài)內(nèi)存的深入理解

    C/C++ 傳遞動(dòng)態(tài)內(nèi)存的深入理解

    本篇文章是對(duì)C/C++中的傳遞動(dòng)態(tài)內(nèi)存進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#實(shí)現(xiàn)偽裝文件夾功能

    C#實(shí)現(xiàn)偽裝文件夾功能

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)偽裝文件夾的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • C#實(shí)現(xiàn)自定義雙擊事件

    C#實(shí)現(xiàn)自定義雙擊事件

    這篇文章主要介紹了C#實(shí)現(xiàn)自定義雙擊事件,需要的朋友可以參考下
    2014-08-08
  • C#實(shí)現(xiàn)截取驗(yàn)證碼圖片

    C#實(shí)現(xiàn)截取驗(yàn)證碼圖片

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)截取驗(yàn)證碼圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12

最新評(píng)論

东至县| 乌兰县| 山阳县| 尚义县| 红桥区| 土默特左旗| 永登县| 自治县| 聂拉木县| 金山区| 林州市| 海口市| 博湖县| 德安县| 宁化县| 岐山县| 长汀县| 平远县| 诸城市| 北流市| 靖宇县| 县级市| 裕民县| 旬阳县| 刚察县| 南投县| 丹棱县| 开远市| 县级市| 凤庆县| 乳源| 沽源县| 湖北省| 西畴县| 宁明县| 麻栗坡县| 乐东| 平昌县| 青浦区| 宜兰县| 阿图什市|