Reputation: 3730
If I import a namespace like this:
using System;
Why can't I access subnamespace IO like this:
IO.FileInfo fi;
Insted I must write either a whole path:
System.IO.FileInfo fi;
Or import whole IO namespace and use class without namespace
using System.IO;
FileInfo fi;
Am I missing something here?
Upvotes: 3
Views: 1082
Reputation: 28608
What you are trying to do only works if the context type is in the same namespace hierarchy, e.g.:
namespace System {
class MyClass {
IO.FileInfo fi;
}
}
You can also have relative imports, like this:
namespace System {
using IO;
}
Upvotes: 0
Reputation: 564451
While it's often convenient to think in terms of "namespaces" and "sub-namespaces", in reality, there are only type names.
In this case, there is a single type: System.IO.FileInfo
The using directive allows the compiler to add System.
to any type to see if it finds a matching type name. However, this won't find IO.FileInfo
, as it will be looking for a IO
type, containing a FileInfo
nested type.
The way the language is designed may seem more cumbersome, but it eliminates the confusion of nested type names vs. namespace names, since it only looks for types within the namespaces defined in the using directives. This reduces the chance of type naming collisions.
Upvotes: 5
Reputation: 53183
C# does not really have the concept of subnamespaces. The periods in the namespace name are just there for logical organization purposes.
System
and System.IO
are two different namespaces as far as C# is concerned.
If you just need the FileInfo
class you could do this:
using FileInfo = System.IO.FileInfo;
Upvotes: 2