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

C# 擴展方法Extension Method在語法上的核心用法

 更新時間:2026年06月01日 09:30:47   作者:光澤雨  
這段SEO描述融合了"擴展方法"、"this關(guān)鍵字"和"College糖"三個關(guān)鍵詞,詳細(xì)介紹了C#中擴展方法的正確編寫規(guī)則和使用方法,強調(diào)了"this"關(guān)鍵字的重要性以及它如何讓代碼更加優(yōu)雅和易讀,感興趣的朋友跟隨小編一起看看吧

??? 擴展方法的三大鐵律

僅僅在參數(shù)前加 this 是不夠的,C# 編譯器對擴展方法有極其嚴(yán)格的“連帶要求”。你截圖里的代碼完美地遵守了這三點:

  • 類必須是靜態(tài)的 (static class) 擴展方法不能寫在普通的類里面。它必須被包裹在一個 public static class 里面(比如通常會建一個叫 StringExtensions 的類)。
  • 方法必須是靜態(tài)的 (static method) 就像你截圖里的 public static int GetInt(...),方法本身也必須用 static 修飾。
  • 第一個參數(shù)加上 this 這是你已經(jīng)完全領(lǐng)悟的一點:this 后面跟著的類型,就是你要“掛載”這個方法的真實目標(biāo)。在你的截圖里,this string str 意味著你要把 GetInt 這個方法強行掛載到 C# 所有的字符串(string)身上。

?? 對比實戰(zhàn):為什么要這么寫?

擴展方法的本質(zhì),其實是微軟為了讓代碼更好看而給程序員發(fā)的一顆語法糖。

如果沒有擴展方法(傳統(tǒng)的靜態(tài)調(diào)用): 你只能像調(diào)用普通工具類一樣去使用它,代碼看起來很生硬,而且打斷了閱讀邏輯。

string numStr = "123";
// 傳統(tǒng)寫法:把變量當(dāng)作參數(shù)塞進(jìn)去
int result = StringHelper.GetInt(numStr); 

有了擴展方法(有了 this 的魔力): 因為你加了 this string str,C# 編譯器允許你直接在任何字符串變量后面打一個點 .,這個方法就會像原生方法一樣神奇地彈出來!

string numStr = "123";
// 現(xiàn)代優(yōu)雅寫法:順著思維邏輯直接點出來
int result = numStr.GetInt()

?? 核心總結(jié)

當(dāng)你寫下 numStr.GetInt() 的那一瞬間,C# 編譯器在底層其實偷偷幫你把它翻譯成了 StringHelper.GetInt(numStr)。

所以,加上 this 的意義就是告訴編譯器:“別把我當(dāng)成普通的參數(shù),我是你要外掛的目標(biāo)對象,把我前面的那個變量直接當(dāng)成參數(shù)傳進(jìn)來吧!”你的直覺非常敏銳,這就是擴展方法的全部真相。

1.this修飾的就是被擴展的類型

沒錯,GetInt(this string str) 里的 this string 就是在明確地告訴 C# 編譯器:“我要把這個方法強行掛載到 string 這個類型上”。這就是為什么你在任何字符串變量后面打一個 .,都能像調(diào)用原生方法一樣看到它。

2. 鐵律:一個方法里只能有一個this,且必須是第一個參數(shù)

你猜測的 Gent(this string str, this int num) 在 C# 中是絕對不允許的,編譯器會直接標(biāo)紅報錯。

?? 為什么底層不允許有兩個 this

我們回到擴展方法誕生的初衷和調(diào)用邏輯上來想一想: 擴展方法是為了讓我們能用 變量.方法名() 的優(yōu)雅形式來寫代碼。那個放在 . 前面的唯一變量,就是 this 所指代的目標(biāo)對象(宿主)。

因為一個點 . 的前面只能出現(xiàn)一個實例對象,自然也就只能指定一個 this 目標(biāo)了。你無法在語法上同時用兩個對象去“點”出一個方法。

?? 正確實戰(zhàn):如果需要傳入多個參數(shù)怎么辦?

如果你不僅需要擴展 string,還需要在調(diào)用時傳入一個 int num,正確的做法是:只有第一個參數(shù)加 this 作為掛載目標(biāo),后面的參數(shù)全部像普通方法一樣正常寫。

? 正確的定義方式:

public static class StringExtensions
{
    // 第一個參數(shù)指明宿主(加 this)
    // 第二個、第三個參數(shù)就是普通的傳參(不加 this)
    public static int GetInt(this string str, int num)
    {
        // 示例:將字符串轉(zhuǎn)換后加上你傳入的 num
        int result;
        int.TryParse(str, out result);
        return result + num;
    }
}

? 優(yōu)雅的調(diào)用方式:

string myStr = "100";
// myStr 自動對應(yīng)了底層參數(shù)里的 `this string str`
// 括號里的 5,對應(yīng)了底層參數(shù)里的 `int num`
int finalValue = myStr.GetInt(5); 

一句話總結(jié)你的領(lǐng)悟: this 在擴展方法里是一張唯一的“通行證”,用來綁定宿主對象;方法如果還需要其他材料(參數(shù)),直接按順序排在 this 參數(shù)的后面即可。你對代碼邏輯的推演能力非常出色!

到此這篇關(guān)于C# 擴展方法Extension Method在語法上的核心用法的文章就介紹到這了,更多相關(guān)C# 擴展方法Extension Method內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • WinForm程序以管理員權(quán)限運行的幾種方法小結(jié)

    WinForm程序以管理員權(quán)限運行的幾種方法小結(jié)

    在日常開發(fā)中,我們經(jīng)常會遇到這樣的問題:程序在運行過程中需要訪問系統(tǒng)文件、注冊表或者進(jìn)行數(shù)據(jù)庫操作,但因為權(quán)限不足而無法正常執(zhí)行,本文將介紹WinForm程序以管理員權(quán)限運行的三種方法,需要的朋友可以參考下
    2025-07-07
  • VS?Code里使用Debugger?for?Unity插件調(diào)試的方法(2023最新版)

    VS?Code里使用Debugger?for?Unity插件調(diào)試的方法(2023最新版)

    Debugger for Unity是一個非正式支持的,官方推薦的,應(yīng)用最廣的,Visual Studio Code上的Unity調(diào)試插件,這篇文章主要介紹了VS?Code里使用Debugger?for?Unity插件進(jìn)行調(diào)試(2023最新版),需要的朋友可以參考下
    2023-02-02
  • SQL+C#實現(xiàn)獲得當(dāng)前月的第一天與最后一天

    SQL+C#實現(xiàn)獲得當(dāng)前月的第一天與最后一天

    本文分享了SQL+C#獲得當(dāng)前月的第一天與最后一天的代碼實例,代碼簡潔,適合初學(xué)者參考。需要的朋友可以看下
    2016-12-12
  • 如何使用 C# 刪除 PDF 中的數(shù)字簽名

    如何使用 C# 刪除 PDF 中的數(shù)字簽名

    這篇文章主要介紹了如何使用 C# 刪除 PDF 中的數(shù)字簽名,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2026-04-04
  • C#取得隨機顏色的方法

    C#取得隨機顏色的方法

    這篇文章主要介紹了C#取得隨機顏色的方法,通過自定義函數(shù)實現(xiàn)隨機顏色的功能,非常具有實用價值,需要的朋友可以參考下
    2015-01-01
  • C#?WPF?ListBox?動態(tài)顯示圖片功能

    C#?WPF?ListBox?動態(tài)顯示圖片功能

    這篇文章主要介紹了C#?WPF?ListBox?動態(tài)顯示圖片,處理過程分為前臺代碼和后臺代碼,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • c#實現(xiàn)漢諾塔問題示例

    c#實現(xiàn)漢諾塔問題示例

    這篇文章主要介紹了c#實現(xiàn)漢諾塔問題示例,需要的朋友可以參考下
    2014-04-04
  • C# Double轉(zhuǎn)化為String時的保留位數(shù)及格式方式

    C# Double轉(zhuǎn)化為String時的保留位數(shù)及格式方式

    這篇文章主要介紹了C# Double轉(zhuǎn)化為String時的保留位數(shù)及格式方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • WinForm實現(xiàn)按鈕空格防誤觸的實戰(zhàn)指南

    WinForm實現(xiàn)按鈕空格防誤觸的實戰(zhàn)指南

    文章介紹了為什么在WindowsForms(WinForms)中按空格鍵會自動觸發(fā)按鈕點擊事件的問題,并提供了一個自定義按鈕類,通過重寫`ProcessCmdKey`方法,徹底阻止空格鍵觸發(fā)點擊事件,需要的朋友可以參考下
    2025-12-12
  • 解析C#的擴展方法

    解析C#的擴展方法

    在本文中,主要對擴展方法進(jìn)行了一些規(guī)則說明、聲明方式,使用方式,以及對擴展方法的意義和擴展方法的原理進(jìn)行了簡單的解答。并在本文的最后給了一個枚舉的擴展方法代碼。
    2016-12-12

最新評論

清丰县| 吴堡县| 搜索| 龙州县| 谢通门县| 金乡县| 恩施市| 镇巴县| 灌云县| 同仁县| 手游| 铁力市| 平原县| 泸水县| 陆良县| 金华市| 西充县| 蕲春县| 遂川县| 高雄市| 曲周县| 广水市| 冀州市| 运城市| 西藏| 常山县| 阿图什市| 冀州市| 湛江市| 湛江市| 共和县| 罗甸县| 车致| 华宁县| 肥乡县| 泰来县| 胶南市| 山东| 宁国市| 普安县| 伊吾县|