我發佈了this問題昨天詢問有關C#4客戶端將.NET應用程序部署到.NET 3.5目標服務器,並且天氣預報C#3在客戶端上編譯了某些東西或C#4。C#CLR /編譯問題
該方案帶有可選參數。我知道可選參數自.NET 1.1以來一直得到支持。爲什麼C#3編譯的IL代碼無法使用可選參數調用C#4編譯的IL代碼?
C#3是否忽略可選屬性?
我發佈了this問題昨天詢問有關C#4客戶端將.NET應用程序部署到.NET 3.5目標服務器,並且天氣預報C#3在客戶端上編譯了某些東西或C#4。C#CLR /編譯問題
該方案帶有可選參數。我知道可選參數自.NET 1.1以來一直得到支持。爲什麼C#3編譯的IL代碼無法使用可選參數調用C#4編譯的IL代碼?
C#3是否忽略可選屬性?
你說得對......的IL只是裝飾瓦特/ OptionalAttributes,但它的調用編譯器,決定該怎麼辦...
從裏希特:
現在,當編譯器看到你有代碼調用一個缺少某些參數的方法,編譯器可以確保你省略可選argumements,抓住他們的默認值了元數據,並且將它們嵌入...
所以它的呼喚編譯器決定做什麼瓦特/自選,而不是所謂的C#4.0 IL ...
更具優勢的情況下,它怎麼就這麼定值可以從利珀特找到調用的方法,@http://blogs.msdn.com/b/ericlippert/archive/2011/05/16/optional-argument-corner-cases-part-three.aspx
我簡單的猜測是因爲基類庫是不同的?這使得C#3. *和4. *之間的差別比2. *和3. *大得多,因爲後者使用相同的BCL。
雖然不確定。
可選參數僅在版本4.0中引入到C#中。 (它們早在VB中可用於.NET)。
我我從IL準則的角度提出這個問題。我理解它的方式是使用最終生成的IL代碼中的屬性來應用可選參數。所以我基本上是要求澄清當C#3生成的IL代碼嘗試使用可選參數來調用代碼時發生的情況,在這種情況下,C#4生成IL,但我猜測對於早期的VB可選代碼,即C#3調用VB使用可選或C#3調用生成的IL代碼生成IL代碼。 – 2011-06-17 13:52:09
謝謝你 - 這正是我正在尋找的。 – 2011-06-17 14:45:06