The first case let's you declare at the beginning of your class what you are intending to use in your class (what are your couplings).
Declarations, among other uses, are used by your IDE and compiler to:
- enable intellisense (autocompletion)
- activate extension methods (e.g. Linq extension methods)
So without declaring them you will loose this feature.
This use is preferrable. It improves code readability too.
Even if Visual Studio does not strongly encourages you to keep your usings clean (displaying warnings and so on like, for example, in java based environments), it is always preferrable to do this doing a "Remove unused imports" from the context menu on your class file.
The second case lets you use a type explicitly referencing it by fully qualified name.
This case is normally used only in name conflict situations.
In the end, binary compiled code will be the same because compiler will optimize it, but the compile process itself could be more efficient if you use the first approach.