VB.NET doesn\'t have out
parameters, but you can specify
on COM and P/Invoke methods to get the same effect for external method
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.
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.