开发者

Does specifying the OutAttribute on ByRef internal methods currently do anything?

开发者 https://www.devze.com 2023-03-21 01:21 出处:网络
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.

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 o开发者_StackOverflow社区n 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?


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.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号