不同程序集,名稱空間類名和方法簽名都一樣的方法,如何調(diào)用

有時(shí)候,你可能會(huì)遇到這樣的問(wèn)題,不同程序集,名稱空間類名和方法簽名都一樣的方法,如何調(diào)用。本文將介紹如何通過(guò)別名的方式來(lái)解決這個(gè)問(wèn)題。
創(chuàng)建兩個(gè)不同的程序集
我們來(lái)創(chuàng)建兩個(gè)不同的程序集,但是他們的名稱空間一樣:
Bilibili 代碼塊無(wú)法正常渲染,因此無(wú)法正常顯示。請(qǐng)關(guān)注微信公眾號(hào)“newbe技術(shù)專欄”,搜索對(duì)應(yīng)文章代碼內(nèi)容。

修改他們的 RootNamespace 為 Example:
Bilibili 代碼塊無(wú)法正常渲染,因此無(wú)法正常顯示。請(qǐng)關(guān)注微信公眾號(hào)“newbe技術(shù)專欄”,搜索對(duì)應(yīng)文章代碼內(nèi)容。

然后,我們?cè)趦蓚€(gè)程序集中都創(chuàng)建一個(gè)類,類名也一樣,并且添加一個(gè)自定義 Where 擴(kuò)展方法:
Bilibili 代碼塊無(wú)法正常渲染,因此無(wú)法正常顯示。請(qǐng)關(guān)注微信公眾號(hào)“newbe技術(shù)專欄”,搜索對(duì)應(yīng)文章代碼內(nèi)容。

創(chuàng)建一個(gè)控制臺(tái)應(yīng)用
然后,我們創(chuàng)建一個(gè)控制臺(tái)應(yīng)用,來(lái)調(diào)用這兩個(gè)程序集中的 Where 方法:
Bilibili 代碼塊無(wú)法正常渲染,因此無(wú)法正常顯示。請(qǐng)關(guān)注微信公眾號(hào)“newbe技術(shù)專欄”,搜索對(duì)應(yīng)文章代碼內(nèi)容。

然后,我們?cè)诳刂婆_(tái)應(yīng)用中調(diào)用這兩個(gè)程序集中的 Where 方法:
Bilibili 代碼塊無(wú)法正常渲染,因此無(wú)法正常顯示。請(qǐng)關(guān)注微信公眾號(hào)“newbe技術(shù)專欄”,搜索對(duì)應(yīng)文章代碼內(nèi)容。

如果是這樣的話,我們會(huì)得到這個(gè)錯(cuò)誤:
Bilibili 代碼塊無(wú)法正常渲染,因此無(wú)法正常顯示。請(qǐng)關(guān)注微信公眾號(hào)“newbe技術(shù)專欄”,搜索對(duì)應(yīng)文章代碼內(nèi)容。

通過(guò)別名的方式來(lái)解決
我們可以通過(guò)別名的方式來(lái)解決這個(gè)問(wèn)題,首先修改項(xiàng)目文件,設(shè)置兩個(gè)程序集的別名:
Bilibili 代碼塊無(wú)法正常渲染,因此無(wú)法正常顯示。請(qǐng)關(guān)注微信公眾號(hào)“newbe技術(shù)專欄”,搜索對(duì)應(yīng)文章代碼內(nèi)容。

然后,我們?cè)诳刂婆_(tái)應(yīng)用中調(diào)用這兩個(gè)程序集中的 Where 方法:
Bilibili 代碼塊無(wú)法正常渲染,因此無(wú)法正常顯示。請(qǐng)關(guān)注微信公眾號(hào)“newbe技術(shù)專欄”,搜索對(duì)應(yīng)文章代碼內(nèi)容。

運(yùn)行就會(huì)得到這樣的結(jié)果:
Bilibili 代碼塊無(wú)法正常渲染,因此無(wú)法正常顯示。請(qǐng)關(guān)注微信公眾號(hào)“newbe技術(shù)專欄”,搜索對(duì)應(yīng)文章代碼內(nèi)容。

為什么會(huì)有這種問(wèn)題
一般來(lái)說(shuō)你會(huì)在三種情況下遇到這個(gè)問(wèn)題:
某個(gè)開源項(xiàng)目使用 ILmerge 把多個(gè)程序集合并成一個(gè)程序集。其中一個(gè)依賴項(xiàng) A 恰好也是你的依賴項(xiàng),但是 A 的版本和開源項(xiàng)目的依賴項(xiàng) A 的版本不一樣,這時(shí)候你就會(huì)遇到這個(gè)問(wèn)題。
很早之前 Rx.net 正對(duì) System.Linq.Async 進(jìn)行了支持,而后來(lái)系統(tǒng)也內(nèi)置了 System.Linq.Async。你會(huì)在使用 Rx.net 的時(shí)候遇到這個(gè)問(wèn)題。
你的同事想考驗(yàn)?zāi)阋幌?,估?jì)把自己寫的 Sqlite 擴(kuò)展和 MSSQL 擴(kuò)展中加入了同樣的方法簽名,然后你就會(huì)遇到這個(gè)問(wèn)題。
總結(jié)
通過(guò)別名的方式,我們可以解決不同程序集,名稱空間類名和方法簽名都一樣的方法,如何調(diào)用的問(wèn)題。
參考
extern alias (C# Reference)1
感謝您的閱讀,如果您覺(jué)得本文有用,快長(zhǎng)按右下角大拇指??為本文點(diǎn)贊~
歡迎關(guān)注作者的微信公眾號(hào)“newbe技術(shù)專欄”,獲取更多技術(shù)內(nèi)容。

本文作者: newbe36524
本文鏈接: https://www.newbe.pro/Others/0x022-how-to-call-a-method-with-the-same-method-signature-in-different-assemblies/
版權(quán)聲明: 本博客所有文章除特別聲明外,均采用 BY-NC-SA 許可協(xié)議。轉(zhuǎn)載請(qǐng)注明出處!
https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/extern-alias?WT.mc_id=DX-MVP-5003606?