Delegates provide a way to define and execute callbacks. Their flexibility allows you to define the exact signature of the callback, and that information becomes part of the delegate type itself. Delegates are type-safe, object-oriented and secure.

Read my full article here CLR-Internals- Process and Application Domain

As you know Microsoft .NET is designed with cross language interoperability. I.e. two .NET compliant languages can interoperate with each other. Which simply means a function in VB .NET can be called by C# and vice-versa.  Read my full article on .NET Cross Language Interoperability at C# Corner