2016-10-17 3 views
3

У меня есть простой консольного приложения с пространством именSystem.Console разрешения к неправильному имен

something.service.console 

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

Console.WriteLine("something"); 

Я получаю ошибку компиляции: Тип или имя пространства имен «WriteLine» dos не существует в пространстве имен something.service.console.

Так что, если я использую

System.Console.WriteLine("something"); 

C# компилятор пытается решить метод WriteLine к неправильному имен ("something.service.console"). В этом случае можно заставить компилятор разрешить Console.WriteLine правильному пространству имен «Система» (вместо переименования моего пространства имен :))?

Спасибо.

+0

Это потому, что ваш класс называется 'Console' так же, как' System.Console'. Вам следует избегать такого наименования –

+0

Как указано в Мотивации, вам следует избегать использования имен классов, которые уже встречаются в структуре. –

+1

Спасибо за ответы, но это был не вопрос :) –

ответ

3

компилятор найдет пространство имен something.service, прежде чем он находит пространство имен System так будет считать, что

Console.WriteLine("something"); 

фактически означает

something.serviceConsole.WriteLine("something"); 

и, следовательно, ваша ошибка.

Два возможных решения либо полностью определить пространство имен, когда у вас есть вопросы, как это:

System.Console.WriteLine("something"); 

или изменить имя пространства имен, так что это не something.service.console но something.service.somethinglese.

4

Вы можете "заставить" это так:

using SysConsole = System.Console; 

Теперь, когда вы используете Console в имеет в виду System.Console

public class Console 
{ 
    private void Test() 
    { 
     SysConsole.WriteLine("something"); 
    } 
} 

Note: There really is nothing bad about using: System.Console.WriteLine() and you should avoid using classnames that already exist in the .NET Framework.

+0

Это не сработает. Здесь 'Console' из' Console.WriteLine' будет по-прежнему разрешаться классу 'Console' в показанном пространстве имен, а не' System.Console'. Имена разрешаются наружу из текущей области, а содержащий класс 'Console' будет первым хитом. – CodeCaster

+0

Да, я исправлю это согласно комментариям выше! –

2

Использование C# 6 функция "используя статический" вам может изменить код, чтобы избежать двусмысленного имени Console без загромождения кода.

Это имело бы смысл, если в коде возникло много вызовов System.Console.WriteLine.

using static System.Console; 

namespace SomeNamespace.Console 
{ 
    public class SomeClass 
    { 
     public void SomeMethod() 
     { 
      WriteLine("abc"); 
     } 
    } 
} 
Смежные вопросы