Ваш пример с конструктором не сработает, но немного более сложная ситуация сработает. Например, предположим, что у вас есть три типа:
- класс Foo в пространстве имен N1
- класс Bar в пространстве имен N2
- класс Baz в пространстве имен N3
Теперь предположим, что Bar
имеет метод, который возвращает экземпляр Foo
:
public static Foo GetFoo() { ... }
Здесь Bar.cs должен был бы использовать директиву using для N1, если только он не указал имя полностью.
Теперь предположим, что у нас есть этот код в Baz:
using N2;
...
var foo = Bar.GetFoo();
Это скомпилируется, но
using N2;
...
Foo foo = Bar.GetFoo();
не будет. Причина заключается в том, что директивы используются только для того, чтобы компилятор знал, что означает имя «Foo» - каково его полное имя. В первом фрагменте Bar.GetFoo()
объявлено как возвращающее N1.Foo
, так что компилятор в порядке. Во втором фрагменте компилятор сначала видит «Foo» и ничего не знает о N1, поэтому не знает, как его искать.