C# internal VS VBNET Friend

Will Marcouiller picture Will Marcouiller · May 7, 2010 · Viewed 8.8k times · Source

To this SO question: What is the C# equivalent of friend?, I would personally have answered "internal", just like Ja did among the answers! However, Jon Skeet says that there is no direct equivalence of VB Friend in C#. If Jon Skeet says so, I won't be the one telling otherwise! ;P

I'm wondering how can the keyword internal (C#) not be the equivalent of Friend (VBNET) when their respective definitions are:

Friend VBNET

The Friend (Visual Basic) keyword in the declaration statement specifies that the elements can be accessed from within the same assembly, but not from outside the assembly. [...]

internal C#

Internal: Access is limited to the current assembly.

To my understanding, these definitions mean quite the same to me.

Then, respectively, when I'm coding in VB.NET, I use the Friend keyword to specify that a class or a property shall be accessible only within the assembly where it is declared. The same in C#, I use the internal keyword to specify the same.

  1. Am I doing something or anything wrong from this perspective?

  2. What are the refinements I don't get?

  3. Might someone please explain how or in what Friend and internal are not direct equivalences?

Thanks in advance for any of your answers!

Answer

Jon Skeet picture Jon Skeet · May 7, 2010

I've said there's no direct equivalent of the C++ "friend" concept. That's not the same as the VB.NET Friend concept, which is indeed equivalent to internal in C#.

Context is important - don't assume that the same word means exactly the same thing in all languages... "static" is a classic example :)