2013-11-15 2 views
0

у меня есть два класса в различных суб пространствах имен:пространство имен проблема доступа с пространствами имен подразделам

namespace Acme.ByteTools 
{ 
     class ByteTools 
     { 
     ... 
     } 
} 

namespace Acme.IO 
{ 
     class Reader 
     { 
     ... 
     } 
} 

В то время как я пытаюсь получить доступ Acme.ByteTools из любого третьего пространства имен, я использую:

using Acme.ByteTools; 
... 
ByteTools.BytesToUint(...); 

но когда я пытаюсь Acme.ByteTools доступа из Acme.IO, компилятор требует различного обозначения:

using Acme.ByteTools; 
... 
ByteTools.ByteTools.BytesToUint(...); 

Почему?

+2

Как правило, не рекомендуется давать классы тем же именам, что и их пространство имен. – siride

+3

Читайте это: http://blogs.msdn.com/b/ericlippert/archive/2010/03/09/do-not-name-a-class-the-same-as-its-namespace-part-one. aspx – siride

+1

http://stackoverflow.com/a/2787425/394487 – siride

ответ

2

Как другие, включая легендарного Эрика Липперта, заявили ... пожалуйста, не создавайте столкновений. Я видел код, пронизанный с помощью директив alias из-за коллизий, и я просто не могу выразить, как разочарование заключается в том, чтобы увидеть, как пространство имен меняет свое имя от класса к классу.

Путаница говорит сама за себя. Посмотрите на что-то вроде этого:

namespace ConsoleApplication1 
{  
    class Program 
    { 
     static void Main(string[] args) 
     { 
      A a = new A();//A's a namespace 
      A.A b = new A.A();//A is a namespace this works! 
      global::A.A nuts = new A();//This fails...ugh 
      Console.ReadLine(); 
     } 
    } 
} 

namespace A 
{  
    class A 
    { 
     public void DoWork() 
     { 
      A a = new A();//A's a class 
      A.A b = new A.A();//A is a type (class) A.A makes no sense to the compiler 
      global::A.A nuts = new A();//Oh but this works fine 
     } 

    } 
} 

Таким образом, исправление заключается в том, чтобы пространства имен и классы были разными. Использование директивы alias using B = A; может облегчить боль, однако эта директива может измениться из файла в файл, и все, что угодно, должно быть полностью квалифицировано.

Смежные вопросы