This book shows how F# can be a great language for helping you to be more productive, while seamlessly integrating with the existing .NET stack. Although 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 (VB.NET), and although 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 have your F# interoperate with unmanaged (native) code as well by 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. Or, even worse, the library exposes different idioms for the concepts in both languages.
Nullable types are for unfortunate ...