VB.NET沒有out
參數,但您可以在COM和P/Invoke方法上指定<Out()> ByRef
以獲得外部方法的相同效果。在ByRef內部方法中指定OutAttribute是否目前執行任何操作?
對內部方法(即僅由.NET代碼調用的方法)是否確實有助於Jitter(或VB.NET編譯器)?或者它目前僅作爲程序員筆記使用。
是否有可能在未來的Jitter中使用它,或者編譯時該屬性是否丟失?
VB.NET沒有out
參數,但您可以在COM和P/Invoke方法上指定<Out()> ByRef
以獲得外部方法的相同效果。在ByRef內部方法中指定OutAttribute是否目前執行任何操作?
對內部方法(即僅由.NET代碼調用的方法)是否確實有助於Jitter(或VB.NET編譯器)?或者它目前僅作爲程序員筆記使用。
是否有可能在未來的Jitter中使用它,或者編譯時該屬性是否丟失?
我已確認VB.NET <Out()>
的確會導致C#客戶端需要out
參數,所以它看起來確實是一樣的。
此外,C#客戶端將其當前值的參數傳入方法中,但這並不令人意外,因爲與COM或P/Invoke不同,它不需要進行編組。 (並且C#不允許直接通過out
參數設置屬性,所以似乎沒有辦法查看C#是否會優化掉以前不需要的分配。)
所以看起來答案它確實有助於將來的C#客戶端使用代碼,並且如果抖動曾經調整C#等價物,它在這裏也會這樣做。雖然因爲VB這樣的語言存在,但它不能做太多,因爲他們自己並不尊重Out
attribute。
我使用VB類對子類MembershipProvider
進行了分類,我們將其稱爲A,然後用C#類對子類A進行調用B.C#代碼B並沒有意識到事件中的抽象方法MembershipProvider
已經在VB子類A中實現,直到我在VB類中應用OutAttribute
,該參數在MembershipProvider
基類抽象方法中指定爲out
。這不僅僅是COM或P/Invoke的影響。
是的,它*完全相同。 C#'out'關鍵字編譯成包含''屬性的IL代碼。 VB.NET只是沒有關鍵字。您可以通過編譯兩個測試項目並使用ILdasm進行比較來驗證這一點。 –
我假設這是指名稱空間System.Runtime.InteropServices中的Out屬性。是這樣嗎? – jswolf19
@ jswolf19是的,修改,也在我的答案鏈接的問題。 –