The "using" directive does not "include" anything at all. It only introduces default/alias naming for top-level types, nothing else. In other words, you can remove all "using" directives and still be able to access the same very types by writing their
full names, that is, then names including namespace names. Please see:
https://msdn.microsoft.com/en-us/library/0d941h9d.aspx[
^].
It's important to understand that namespaces have nothing to do with modularity of .NET. The real units of separate compilation in .NET are assemblies and their modules. There are no any rules requiring any correspondence between assemblies and namespaces: any assembly can declare its type in and number of different namespaces, and any namespace can be used in any number of assemblies. Nevertheless, mixing up such different notions as assemblies and namespaces is a usual big mistake in some of the beginners.
To use the assembly in other assembly, you need to
reference it. Please see:
https://msdn.microsoft.com/en-us/library/8wxf689z%28v=vs.110%29.aspx[
^],
https://msdn.microsoft.com/en-us/library/ms973231.aspx[
^],
https://msdn.microsoft.com/en-us/library/xwb8f617%28v=vs.110%29.aspx[
^],
https://msdn.microsoft.com/en-us/library/s1sx4kfb%28v=vs.110%29.aspx[
^].
Also, assemblies can be loaded during runtime and used through
reflection. But this is another story…
—SA