Как среда CLR различает классы с одинаковыми именами, но без пространства имен в разных сборках во время выполнения?
Пример :
Сборка: Assembly1
public class Foo
{
public void Test()
{
Console.WriteLine("Assembly 1 class Foo");
}
}
Обратите внимание, что у класса Foo нет пространства имен.
Сборка: Assembly2
public class Foo
{
public void Test()
{
Console.WriteLine("Assembly 2 class Foo");
}
}
Обратите внимание, что у класса Foo здесь тоже нет пространства имен.
Итак, Assembly1 и Assembly2 имеют классы с тем же именем, но без пространства имен.
Сборка: TestAssembly1 ----> Относится: Assembly1
namespace TestAssembly1
{
public class TestAssembly1Class
{
public void CallFooMethod()
{
new Foo().Test(); //How CLR would know this Foo is from Assembly 1 at runtime?
}
}
}
Сборка: TestAssembly2 ----------> Относится: Assembly2
namespace TestAssembly2
{
public class TestAssembly2Class
{
public void CallFooMethod()
{
new Foo().Test(); //How CLR would know this Foo is from Assembly 2 at runtime?
}
}
}
Теперь предположим, что есть один исполняемый файл, например MyShell.exe, у которого есть метод Main. что выглядит следующим образом.
class Program
{
static void Main(string[] args)
{
new TestAssembly1Class().CallFooMethod();
new TestAssembly2Class().CallFooMethod();
}
}
Итак, вопрос в том, что оба класса Foo не имеют никакого пространства имен, тогда при выполнении MyShell.exe, как CLR будет различать эти конфликтующие классы Foo?