Another reason for dynamically loading a DLL is reliability.
You can load the DLL into the so-called AppDomain. Appdomain is basically a container for sand containers in which you can put things (either parts of a DLL or an entire EXE) to work in isolation, but inside your application.
If you do not call the type contained in the AppDomain, it has no way to interact with your application.
So, if you have a dodgy third-party DLL or DLL in which you do not have source code, you can load it into AppDomain to isolate it from the main flow of applications.
The end result is that if a third-party DLL throws shaky, only the application is affected, and not your entire application.
Immortal blue
source share