What you describe is usually called a plugin system. Googling for something like "Create Plugin system using C #" will probably give you a lot of information, like below:
http://www.codeproject.com/Articles/4691/Plugin-Architecture-using-C
Main idea:
- Define the interface that your program implements so that the plugin can receive information from your program.
- Define the interface that all plugins will implement so that your program calls plugin methods that will do something.
- Put these interfaces in a separate dll, which is referenced by your program and any plug-ins.
- Provide some way to search for dlls with types that implement your plugin interface, for example. your OpenFileDialog.
- Download the dll and find the types that implement your plugin interface (using reflection).
- Import these types using reflection.
- Call methods on these types through the interface, if necessary.
Relatively managed / non-managed. A managed DLL is one that is built / encoded using a managed .net environment. These will be things encoded in the .net language, for example C # .
An unmanaged dll is more or less encoded in another language.
What you would call an unmanaged dll, I would call a dynamically loaded managed dll. That is, it is still a managed dll (encoded in .net language), but is not loaded until the program is launched.
source share