Some (off topic) remarks:
(1) What Giles writes is simply not true: in Visual Basic Net you don't have to define your commands in a module. You may define them in a class. As I always do. I never use modules. Modules are classes with all members shared. Modules are classes in disguise.
If you had read more carefully the message linked by BlackBox, you would have seen that I was not speaking about
commands (<CommandMethod()> attribute) but about
extension methods (<Extension()> attribute).
With C#, extensions methods have to be defined within a static class, with VB, they have to be defined within a module.
The Add() method is an extension method defined in the DocumentCollectionExtension static class (C#) or module (VB). It extends the DocumentCollection type, and so can be called as an instance method for this type.
(2) I don't have to import 'DocumentCollectionExtension', since it's a class, not a namespace. Although in Visual Basic you could use the Imports statement to import a class. (I sometimes do that with 'System.Math', for example.)
I don't know much about VB (I farly prefer C# or F#), but I am certain of what I say about the need to import a VB module in which are defined extension methods so you can call them as instance methods.
There is a difference between a C# static class and a VB module: with VB, a module have to be explicitly imported when used out of its scope (this is not needed with C#).
IOW, this:
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
' [...]
DocumentCollectionExtension.Add(Application.DocumentManager, "acad.dwt")
' [...]
is equivalent to this:
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices.DocumentCollectionExtension
' [...]
Application.DocumentManager.Add("acad.dwt")
' [...]