Если namespace A2
вложено в namespace A1
, то A2
является членом включающего A1
.Но члены A2
(то есть типы, объявленные в A2
) не являются членами A1
.
a) Что именно подразумевается под членами A2
, не являющимися членами A1
?Другими словами, что было бы иначе, если бы они были также членами A1
?Возможно, что внутри A1
нам не пришлось бы использовать полностью определенное имя для типов, определенных в A2
?
b) Что именно означает пространство имен A2
, являющееся членом A1
?
Кстати - я понимаю пространства имен, меня просто смущает терминология, используемая моей книгой (а именно, А2 является членом А1 и т.д.)
спасибо
РЕДАКТИРОВАТЬ
1) По сути, A2
член A1
является причиной, по которой внутри A1
нам не нужно указывать A1. prefix
при ссылках на типы, объявленные в A2
:
namespace A1
{
class Program
{
static void Main(string[] args)
{
A2.classA2 a2= A2.classA2(); //here we don't need to include A1.
prefix
}
}
namespace A2
{
class classA2 { }
}
}
2) В assembly asmLibrary.dll
namespace A
{
public class A1{}
namespace B
{
public class B1{}
}
}
определяется следующее приложение App1
также имеет ссылку на сборку asmLibrary.dll
:
namespace A
{
class Program
{
static void Main(string[] args)
{
B.B1 instanceB1 = new B.B1();
}
}
}
Следующее приложение App2
имеет ссылку на сборку asmLibrary.dll
:
using A;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
A.B.B1 bInstance = new A.B.B1();
A1 a1 = new A1();
}
}
}
a) Когда мы попытались объявить в App2
экземплярA.B.B1
, нам нужно было указать полное имя типа.Но с App1
нам было разрешено указать тип через B.B1
.Таким образом, почему нам было разрешено пропустить префикс A.
внутри App1
, но не внутри App2
(App2
имеет директиву using A;
, поэтому его поведение должно быть таким же, как у App1
)?
b) Кроме того, если namespace B
является членом namespace A
, тогда App2
не должно позволять нам объявлять тип A.B.B1
с использованием синтаксиса B.B1 instanceB1 = new B.B1();
?!