2011-07-19 15 views
9

VB.NET没有out参数,但您可以在COM和P/Invoke方法上指定<Out()> ByRef以获得外部方法的相同效果。在ByRef内部方法中指定OutAttribute是否目前执行任何操作?

对内部方法(即仅由.NET代码调用的方法)是否确实有助于Jitter(或VB.NET编译器)?或者它目前仅作为程序员笔记使用。

是否有可能在未来的Jitter中使用它,或者编译时该属性是否丢失?

回答

9

我已确认VB.NET <Out()>的确会导致C#客户端需要out参数,所以它看起来确实是一样的。

此外,C#客户端将其当前值的参数传入方法中,但这并不令人意外,因为与COM或P/Invoke不同,它不需要进行编组。 (并且C#不允许直接通过out参数设置属性,所以似乎没有办法查看C#是否会优化掉以前不需要的分配。)

所以看起来答案它确实有助于将来的C#客户端使用代码,并且如果抖动曾经调整C#等价物,它在这里也会这样做。虽然因为VB这样的语言存在,但它不能做太多,因为他们自己并不尊重Out attribute

+1

是的,它*完全相同。 C#'out'关键字编译成包含''属性的IL代码。 VB.NET只是没有关键字。您可以通过编译两个测试项目并使用ILdasm进行比较来验证这一点。 –

+0

我假设这是指名称空间System.Runtime.InteropServices中的Out属性。是这样吗? – jswolf19

+0

@ jswolf19是的,修改,也在我的答案链接的问题。 –

1

我使用VB类对子类MembershipProvider进行了分类,我们将其称为A,然后用C#类对子类A进行调用B.C#代码B并没有意识到事件中的抽象方法MembershipProvider已经在VB子类A中实现,直到我在VB类中应用OutAttribute,该参数在MembershipProvider基类抽象方法中指定为out。这不仅仅是COM或P/Invoke的影响。

相关问题