2015-10-07 2 views
0

У меня есть следующий классимен и класс имеет такое же имя

namespace COM.XX.ZZ{ 
class XX{ 
} 
} 

, когда я пытаюсь использовать его в другом классе

using COM.XX.ZZ; 
class someClass{ 
static void main(String args[]){ 
     XX.someMethod(); 
} 
} 

Visual Studio запутаться между классом и потому что оба имеют одно и то же имя. Известно ли ограничение на визуальную студию, что пространство имен и класс всегда должны быть разными?

+1

какая ошибка показывает? –

+1

Тот факт, что у вас есть класс и пространство имен с тем же именем, является плохим дизайнерским решением. Спасите себя от боли и измените ту или иную. Пространство имен должно описывать общую категорию/различие, например. 'MyApp.Web.WebSockets', который содержит определенные классы в этой категории, например. 'WebSocketFactoryThingy'. Имя класса не должно быть частью пространства имен, на мой взгляд. Но это только я. –

+0

с использованием COM.XX.ZZ; –

ответ

4

Нет необходимости иметь отдельные имена классов и имен, но в действительности компилятор иногда путается. Для всех сторон лучше всего указывать имена пространства имен и имена классов.

Если вы хотите использовать одно и то же имя, вы можете помочь компилятору не запутаться. Используйте using для вашего класса:

using XXClass = COM.XX.ZZ.XX; 

Затем вы можете использовать его как это:

XXClass.someMethod(); 

Это far from recommended, поэтому я предлагаю переименовать любой из них.


Другая причина этого, возможно, не в том, что someMethod не является статичным. В этом случае компилятор считает, что вы ссылаетесь на XX -the-namespace. Попробуйте создать экземпляр XX первый:

XX xx = new XX(); 
xx.someMethod(); 
1

Если ваш класс имеет статический метод, называемый SomeMethod(),, доступ к которой, например:

namespace COM.XX.ZZ 
{ 
    class XX 
    { 
     public static void SomeMethod() 
     { 

     } 
    } 
} 

Чем вы можете использовать:

using COM.XX.ZZ; 

class someClass 
{ 
    static void main(String args[]) 
    { 
     COM.XX.ZZ.XX.SomeMethod(); 
    } 
} 

Обратите внимание, что перед вызовом статического метода я добавил полный префикс пространства имен.

Редактировать: использование того же имени для пространств имен и классов действительно не очень хорошая идея.

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