Возникают проблемы, когда две из упомянутых сборок обе определяют тип A.A1 - PullRequest
3 голосов
/ 17 июля 2010

Если две сборки определяют namespace A, содержащую class A1, то эти два класса считаются уникальными типами.

a) Два пространства имен также считаются уникальными?

b) Если program P имеет ссылку на обе сборки, как мы можем создать экземпляры двух типов?А именно, я продолжаю получать сообщение об ошибке при попытке создать экземпляр A.A1

using A;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            A1 a = new A1(); // error
        }
  }
}

c) Но если program P также определяет type B.A1, то компилятор не будет жаловаться, когда я объявляюэкземпляр A1:

using A;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            A1 a = new A1(); // ok
        }
    }

    class A1 { }
}

Компилятор не должен жаловаться, так как не может знать, какую версию A1 использовать (A.A1 из одной из упомянутых сборок или B.A1)?

спасибо

Ответы [ 2 ]

5 голосов
/ 17 июля 2010

Вы можете решить эту проблему с помощью директивы extern alias .

А вот лучшее объяснение .

1 голос
/ 17 июля 2010

Ссылка на две сборки, имеющие одинаковые пространства имен и одинаковые элементы в этих пространствах имен, является полным нет-нет (т.е. не делайте этого!). Если у вас есть контроль над одной или другой сборкой, убедитесь, что корневые пространства имен для них различны, а затем вы можете устранить неоднозначность ссылок на элементы в иерархии сборки / пространства имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...