This book presents F# as a great language for helping you to be more productive and one that can also seamlessly integrate with the existing .NET stack. While it is true that F# is a great language, the word seamlessly may need to be qualified.
The dominant languages used in .NET today are C# and Visual Basic .NET, and while in F# you can write and call into object-oriented assemblies to interact with C# and VB.NET code, some concepts may get lost in translation.
This appendix is focused on how to ease interop with F#. By the end of this appendix, you’ll be able to identify problem areas when doing multilanguage programming. In addition, you’ll be able to make your F# interoperate with unmanaged (native) code using Platform Invoke and COM.
Although F# allows you to work with both C# and Visual Basic .NET, in this appendix, I’m just going to refer to C#, for convenience. Whenever you see the term C#, you can replace it with the phrase C# or Visual Basic .NET, depending on your preference.
The key to interoperation between .NET languages is to make sure that the types and methods in the public surface area of a class library are available to all languages consuming the code. Intuitively, if a library exposes constructs that are not native to the consuming language, things can look a little strange.
When writing F# code you should refrain from exposing functional types such as discriminated unions, records, and function values ...