欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# 靜態(tài)類(lèi),高手不想讓你知道的 15 個(gè)真相

admin
2024年12月11日 9:25 本文熱度 250

前言

嗨,大家好!

在 C# 面向?qū)ο缶幊痰暮Q笾?,?lèi)(Class)是支撐我們代碼的重要基石,而靜態(tài)類(lèi)則是這個(gè)基礎(chǔ)中的一塊璞玉。你可能在編程的旅途中聽(tīng)說(shuō)或使用過(guò)靜態(tài)類(lèi),它到底是什么呢?

簡(jiǎn)單來(lái)說(shuō),如果一個(gè)類(lèi)里僅包含靜態(tài)成員和靜態(tài)方法,那它就可以被稱(chēng)為靜態(tài)類(lèi),通常我們會(huì)用 static 修飾符來(lái)標(biāo)識(shí)它,例如:

/// <summary>
/// 使用 static 修飾符定義靜態(tài)類(lèi)
/// </summary>
static class StaticDemo
{    
    // 聲明靜態(tài)字段
    private static string staticString = "static string";

    // 聲明靜態(tài)屬性
    public static string StaticString
    {
        get { return staticString; }
        set { staticString = value; }
    }
    
    // 實(shí)現(xiàn)靜態(tài)方法
    public static void ShowMsg()
    {
        Console.WriteLine(StaticString);
    }

    public static void Main()
    {
        // 訪(fǎng)問(wèn)靜態(tài)方法
        // 為了演示,這里使用 類(lèi).方法 的方式訪(fǎng)問(wèn),實(shí)際開(kāi)發(fā)中是不需要的
        StaticDemo.ShowMsg();
    }
}

接下來(lái),我將和大家分享我總結(jié)的關(guān)于使用靜態(tài)類(lèi)的15個(gè)經(jīng)驗(yàn),希望能為你的項(xiàng)目帶來(lái)靈感和幫助!

使用經(jīng)驗(yàn)總結(jié)

1. 保持純粹

如果一個(gè)類(lèi)只包含靜態(tài)成員和靜態(tài)方法,建議最好將它標(biāo)記為 static,并聲明一個(gè)私有構(gòu)造函數(shù),以防止其他程序員在類(lèi)的范圍之外實(shí)例化類(lèi)的實(shí)例。

2. 天然密封

編譯器會(huì)自動(dòng)將靜態(tài)類(lèi)標(biāo)記為密封類(lèi)(sealed),這意味著它不能被繼承,確保了其成員的安全性和不可變性。

3. 靜態(tài)構(gòu)造函數(shù)

靜態(tài)類(lèi)可以包含靜態(tài)構(gòu)造函數(shù),用于初始化類(lèi)中的靜態(tài)成員,包括靜態(tài)字段和靜態(tài)屬性,但只能執(zhí)行一次,要注意的是,靜態(tài)構(gòu)造函數(shù)不能帶參數(shù)和訪(fǎng)問(wèn)修飾符如 public,比如:

static StaticDemo() 
{
    staticString = "靜態(tài)字符串";
}

靜態(tài)字段可以在聲明時(shí)初始化,也可以通過(guò)靜態(tài)構(gòu)造函數(shù)進(jìn)行初始化,靜態(tài)構(gòu)造函數(shù)會(huì)覆蓋聲明時(shí)的初始化值。

一般來(lái)說(shuō),簡(jiǎn)單的靜態(tài)成員在聲明時(shí)進(jìn)行初始化即可,復(fù)雜的靜態(tài)成員才建議選擇在靜態(tài)構(gòu)造函數(shù)中進(jìn)行初始化。

4. 簡(jiǎn)化訪(fǎng)問(wèn)

靜態(tài)屬性和靜態(tài)方法只能由類(lèi)自身訪(fǎng)問(wèn),這使得直接通過(guò)類(lèi)名調(diào)用靜態(tài)方法,無(wú)需實(shí)例化對(duì)象,從而讓代碼調(diào)用變得更加簡(jiǎn)單

5. 調(diào)用快速

由于無(wú)需實(shí)例化,靜態(tài)方法的調(diào)用速度往往更快。

6. 內(nèi)存使用效率高

靜態(tài)類(lèi)只有一個(gè)實(shí)例,所以相對(duì)于多個(gè)實(shí)例來(lái)說(shuō),它在內(nèi)存使用上更為高效,能夠用更少的內(nèi)存存儲(chǔ)相同的功能,就像一個(gè)精明的家庭主婦,總是能把每一分錢(qián)都花在刀刃上

7. 編譯期綁定

靜態(tài)方法是在編譯期綁定的,這意味著它們?cè)谶\(yùn)行時(shí)不需要額外的查找和解析過(guò)程,從而提高了性能

8. 常駐內(nèi)存

靜態(tài)方法和字段是常駐內(nèi)存的,這意味著它們?cè)谡麄€(gè)程序運(yùn)行期間都會(huì)占用內(nèi)存空間。所以,用得著的時(shí)候它們就在那兒,用不著的時(shí)候……它們也在那兒。

9. 不能引用 this

普通類(lèi)中的靜態(tài)方法不能引用 this 關(guān)鍵字訪(fǎng)問(wèn),否則會(huì)引起編譯時(shí)錯(cuò)誤

10. 不能被虛擬化和覆寫(xiě)

普通類(lèi)中的靜態(tài)方法不能被標(biāo)記為 virtual、abstract 或者 override,可以被派生類(lèi)訪(fǎng)問(wèn),但是不能被派生類(lèi)覆寫(xiě),就像是一首經(jīng)典老歌,你只能欣賞,不能篡改

11. 無(wú)法實(shí)現(xiàn)接口

靜態(tài)類(lèi)無(wú)法實(shí)現(xiàn)接口,因?yàn)?CLS(通用語(yǔ)言規(guī)范)不允許接口有靜態(tài)成員,這一點(diǎn)在實(shí)際開(kāi)發(fā)之中可能會(huì)給語(yǔ)言之間的交互帶來(lái)問(wèn)題

12. 全局共享

靜態(tài)類(lèi)的成員在應(yīng)用程序的所有實(shí)例中共享。這使得靜態(tài)類(lèi)非常適合執(zhí)行全局工具函數(shù)的場(chǎng)景,例如:

  • 工具類(lèi):靜態(tài)類(lèi)常用于實(shí)現(xiàn)工具函數(shù),如數(shù)學(xué)計(jì)算、字符串處理等
  • 線(xiàn)程池:靜態(tài)類(lèi)可以用于管理線(xiàn)程池,提供全局的線(xiàn)程管理功能
  • 全局服務(wù):靜態(tài)類(lèi)可以用于提供全局的服務(wù)或配置,如常量、日志記錄、配置管理等

13. 線(xiàn)程安全

使用靜態(tài)類(lèi)時(shí)要注意,必須確保它們是線(xiàn)程安全的,在多線(xiàn)程環(huán)境中,靜態(tài)變量可能會(huì)導(dǎo)致數(shù)據(jù)不一致。

建議在多線(xiàn)程中,在訪(fǎng)問(wèn)靜態(tài)成員時(shí),使用 lock 關(guān)鍵字來(lái)確保同一時(shí)間只有一個(gè)線(xiàn)程能夠訪(fǎng)問(wèn)該成員,比如:

private static object _lock = new object();
public static void SomeMethod()
{
    lock (_lock)
    {
        // 執(zhí)行線(xiàn)程安全的操作
    }
}

這種方法可以有效地防止多個(gè)線(xiàn)程同時(shí)修改靜態(tài)成員導(dǎo)致的數(shù)據(jù)不一致問(wèn)題。

14. 謹(jǐn)慎使用集合

如果靜態(tài)類(lèi)中需要使用集合類(lèi)(如 List<T>),建議使用 C# 提供的線(xiàn)程安全集合類(lèi),例如 ConcurrentBag<T> 或 ConcurrentQueue<T>。這些集合類(lèi)在多線(xiàn)程環(huán)境下自動(dòng)處理并發(fā)操作,避免數(shù)據(jù)損壞。

15. 避免過(guò)度使用

過(guò)度使用靜態(tài)類(lèi)可能導(dǎo)致代碼耦合度過(guò)高,降低代碼的可維護(hù)性,建議按需使用靜態(tài)類(lèi)

最后

靜態(tài)類(lèi)在 C# 中是一個(gè)強(qiáng)大的特殊類(lèi),了解它的特性和最佳實(shí)踐,可以幫助我們?cè)陧?xiàng)目中更有效地利用它的優(yōu)勢(shì),讓它發(fā)揮更大的作用!


該文章在 2024/12/11 9:25:43 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved