I have faced with a situation in VB.NET and C# (.NET2) with the visibility of the static/shared members. It seems to me a little strange in VB.NET:
publi
It is a feature; this is not a bug. VB is working as designed. Different languages make different choices about whether a static method can be treated as a method of an instance or not. VB allows it. C++ allows it. C# does not.
Remember, the design criteria of different languages are different, and therefore the decisions made are different. On the C# design team, we highly value a language definition which makes illegal patterns that look suspicious; since there's no meaning to passing an instance as the receiver to a static method (unless computing the receiver expression causes a side effect) then why allow the user to type meaningless code?
On the VB design team, they value the code working the way you meant it to work the the first time you typed it; if something looks a bit dodgy, maybe give a warning, but allow it and move on.
If you're interested in some of the more subtle issues in the design of static calls in C#, here's an interesting issue:
http://blogs.msdn.com/ericlippert/archive/2009/07/06/color-color.aspx