目前在 ByRef 内部方法上指定 OutAttribute 有什么作用吗?

发布于 2024-11-25 03:26:26 字数 243 浏览 3 评论 0 原文

VB.NET 没有 out 参数,但您可以指定 ByRef 在 COM 和 P/Invoke 方法上,以获得与外部方法相同的效果。

在内部方法(即仅由 .NET 代码调用的方法)上指定相同的内容实际上对 Jitter(或 VB.NET 编译器)有帮助吗?或者目前仅作为程序员笔记有用。

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

VB.NET doesn't have out parameters, but you can specify <Out()> ByRef on COM and P/Invoke methods to get the same effect for external methods.

Does specifying the same on internal methods (i.e. methods only called by .NET code) actually help the Jitter (or VB.NET compiler)? Or is it currently only useful as a programmer note.

Is it possible it could be used in a future Jitter, or is this attribute lost when compiling?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

弥繁 2024-12-02 03:26:26

我已经确认 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 require out 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.

余罪 2024-12-02 03:26:26

我使用 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 the MembershipProvider had already been implemented in the VB subclass, A, until I applied the OutAttribute in the VB class for parameters that were specified as out in the MembershipProvider base class abstract methods. This has an impact beyond just COM or P/Invoke.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文