Appendix B. F# Interop

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.

Note

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.

.NET Interop

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.

C# Interoperating with F#

When writing F# code you should refrain from exposing functional types such as discriminated unions, records, and function values ...

Get Programming F# now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.