目前在 ByRef 内部方法上指定 OutAttribute 有什么作用吗?
VB.NET 没有 out
参数,但您可以指定
在 COM 和 P/Invoke 方法上,以获得与外部方法相同的效果。
在内部方法(即仅由 .NET 代码调用的方法)上指定相同的内容实际上对 Jitter(或 VB.NET 编译器)有帮助吗?或者目前仅作为程序员笔记有用。
它是否有可能在将来的 Jitter 中使用,或者编译时该属性是否丢失?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我已经确认 VB.NET
确实会导致 C# 客户端需要out
参数,因此它看起来确实是相同的。此外,C# 客户端将其带有当前值的参数传递到方法中,但这并不奇怪,因为与 COM 或 P/Invoke 情况不同,不需要进行编组。 (并且 C# 不允许直接通过
out
参数设置属性,因此似乎没有办法查看 C# 是否会优化掉以前不需要的赋值。)似乎答案是它确实有助于未来可能的 C# 客户端使用代码,并且如果抖动调整了 C# 等效项,它也会在这里做同样的事情。虽然像 VB 这样的语言存在,但它不能做太多事情,因为它们不尊重
Out
属性本身。I've confirmed a VB.NET
<Out()>
does cause a C# client to requireout
arguments, so it does seem to be effectively the same.Also a C# client passes in its arguments with current values into the method, but that's not surprising because, unlike the COM or P/Invoke cases, there's no marshalling to do. (And C# won't allow a property to be set by an
out
argument directly, so there doesn't seem to be a way to see if C# would optimise away a previous unneeded assignment.)So it seems the answer is it does help possible future C# clients use the code, and if the jitter ever adjusts the C# equivalent, it would do the same here. Though because languages like VB exist, it can't do much because they don't respect the
Out
attribute themselves.我使用 VB 类对
MembershipProvider
进行子类化,我们将其称为 A,然后使用 C# 类对 A 进行子类化,我们将其称为 B。C# 代码 B 没有认识到抽象MembershipProvider
中的方法已在 VB 子类 A 中实现,直到我在 VB 类中为指定为out
的参数应用了OutAttribute
代码> 在MembershipProvider
基类抽象方法。这不仅会产生 COM 或 P/Invoke 的影响。I subclassed
MembershipProvider
with a VB class, we'll call it A, and then subclassed A with a C# class we'll call B. The C# code, B, was not recognizing the fact that the abstract methods in theMembershipProvider
had already been implemented in the VB subclass, A, until I applied theOutAttribute
in the VB class for parameters that were specified asout
in theMembershipProvider
base class abstract methods. This has an impact beyond just COM or P/Invoke.