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是的,修改,也在我的答案链接的问题。 –