簡體   English   中英

C#中沒有參數類型的方法參數

[英]Method Parameter Without A Parameter Type In C#

我嘗試使用C#編寫的第三方軟件的試用版。 當我嘗試使用它的API時,我遇到了一個奇怪的問題。

我正在使用visual studio 2015,我在他們的API-SDK中發現了一個有趣的擴展方法簽名

  public static class CallExtendedInfoEx
  {
        public static void AddToSIPMessage(this CallExtendedInfo info,  msg);
  }

第二個參數類型不存在 。以前在C#中見過。 我嘗試將通用的Object參數作為第二個參數,並且C#Compiler給出了一個奇怪的錯誤

嚴重性代碼描述項目文件行

錯誤CS1503參數2:無法從'object'轉換為'。'

它使用“null”...沒有編譯器錯誤或運行時錯誤[忽略我認為]

這些人怎么能用C#編寫這樣的代碼? 它可以嗎? 任何想法?

注意:我懷疑代碼存在問題...但我仍然不明白這里發生了什么

  IL_0073:  call       void [CallExtendedInfoEx::AddToSIPMessage(class [VoIP.CallExtendedInfo,
                                                                                  class [VoIPSDK]''.'')

好吧,看看ILDASM輸出,很明顯,該參數具有完全有效的類型。 當然,它是一種你無法在C#中實際命名的類型,但它在CLR中完全有效。

您可以傳遞null的事實不應該令人驚訝 - 參數是引用類型(或可以從null轉換),因此null是一個完全有效的值。 另一方面,期望傳遞object實例是完全錯誤的 - 您只能傳遞更多派生類型作為參數,而不是更少 傳遞string (更具體)而不是object (不太具體)是可以的,但不是相反。

最有可能的是,這是一個你不應該觸摸的方法(即不是API / SDK的公共合同的一部分),或者你應該從其他方法獲取參數的實例 - 從不在任何地方使用顯式類型。

這不是有效的C#代碼。 一些反編譯器可能會給你那些代碼,或者你復制它的文檔是錯誤的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM