zoukankan      html  css  js  c++  java
  • 探討 .NET 中的 struct 與 class

    dotNET 中的 class (類) 和 VB.NET 的 Module (模組) 為 Reference Type,這種「型別系統」會儲存變數的記憶體位址參考,並在「數據結構」的「堆積 (Heap)」上做配置;其相較於直接把資料存在「數據結構」Stack 中的 Value Type,因為會多做一次記憶體位址參考的動作,會較浪費系統資源。

    若您的 .NET 物件只是要存放「數值、字串」等資料,可改用 struct (結構) 這種輕量級的 class。其行為與 class 相似,亦可實作 interface,但不具備如 OOP 的「繼承」等較複雜的功能,亦即它不能有父類或子類。而由於 struct 被設計為 Value Type,因此在效能的表現上會比 class 來得出色。

    struct 是從 System.Object 的 System.ValueType 直接繼承而來。與 class 不同的是,struct 雖然也有預設的 constructor,但它不須使用 new 運算子就能執行「個體化」,例如以下的 C# 範例:

    MyStruct s;

    就等於

    MyStruct s = new MyStruct();


    由於 Value Type 的 struct 可直接封裝物件的資訊,省略掉了 Reference Type 的物件位址參考步驟,除了可以稍微提升程序的執行效能外,還可節省記憶體的使用。若您的 .NET 程序不需要複雜的 OO 功能,但仍需要物件 instance 使用上的彈性,可考慮改用 struct。而且 VB.NET 和 C# 皆支援 struct (在 VB.NET 中稱為 Structure)。

    using
     System;
    using
     System.Collections.Generic;
    using
     System.Text;
    using
     System.Web;
    using
     System.Web.Security;
    using
     System.Web.UI;
    using
     System.Web.UI.WebControls;
    using
     System.Web.UI.WebControls.WebParts;
    using
     System.Web.UI.HtmlControls;

    namespace
     com.公司名稱.Library_Message
    {
        
    //
    class CustomMessage
        
    //{ }


        
    public struct CustomMessage
        
    {
            
    public static string popupAlert(Page thisPage, string
     strResourceFileName)
            
    {
                Literal litTxtMsg 
    = new
     Literal();

                litTxtMsg.Text 
    = "<script>alert('" + strResourceFileName + "\\n')</script>"
    ;

                thisPage.Controls.Add(litTxtMsg);

                
    return
     litTxtMsg.Text;

            }
     // end of popupAlert()

    代碼 1 用 struct 取代 class 的範例

    上方代碼 1 中的 C# 範例,為版工以前寫的,專門用來彈出 JavaScript Alert、Confirm 小視窗的「類別庫 (class library)」專案。由於其不需要 OOP 的「繼承」、override 等功能,因此捨棄用 class,將各個 method 改寫在 struct 中。


    -------------------------------------------------
    (本文在版工的舊 Blog 中,發表日期為 2006/08/28)

     

  • 相关阅读:
    队列简单题
    排序篇(c++/c实现)
    天河计算机0.5
    BZOJ2301/LG2522 「HAOI2011」Problem B 莫比乌斯反演 数论分块
    BZOJ1391/LG4177 「CEOI2008」order 最大权闭合子图
    BZOJ2007/LG2046 「NOI2010」海拔 平面图最小割转对偶图最短路
    BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路
    BZOJ2339/LG3214 「HNOI2011」 卡农 组合数学
    LG1840 Color the Axis 线段树
    LG5239 回望京都 组合数+暴力
  • 原文地址:https://www.cnblogs.com/WizardWu/p/1231474.html
Copyright © 2011-2022 走看看