У меня есть структура с несколькими пространствами имен, и в каждом пространстве имен у меня есть один статический класс, который является небольшим небольшим пауком в сети этого пространства имен. Как начальник отдела.Конфликт имен между пространством имен и классом
Приведем пример из двух пространств имен, Foo.Bar.Baz
и Foo.Bar.Quux
.
У меня есть один файл, который выглядит следующим образом:
namespace Foo.Bar.Baz
{
static class Baz
{
public static void DoSomething()
{
Console.Writeline("Doing something...");
}
}
}
, а затем второй файл:
using Foo.Bar.Baz
namespace Foo.Bar.Quux
{
static class Quux
{
public static void GetToWork()
{
Baz.DoSomething();
}
}
}
Теперь, я получаю ошибку во втором файле, когда я пытаюсь скомпилировать потому, что он считает, что Baz - это пространство имен, а не класс. Но так как у меня есть строка using Foo.Bar.Baz
, должно быть хорошо использовать любой класс внутри этого пространства имен, не прибегая к префиксному имени имени пространства имен, правильно? Я могу использовать другие вещи из этого пространства имен правильно, но не класс с тем же именем.
Это похоже на то, что компилятор тайно добавляет эту строку в каждый файл: using Foo.Bar
.
Кроме того, я не могу просто поставить статический Baz
класса внутри Foo.Bar
имен с тех пор я получаю ошибки, говоря, что Foo.Bar.Baz
не пространство имен (поскольку у меня есть другие вещи в этом пространстве имен, и есть файлы, которые используют это пространство имен). Тогда кажется, что компилятор видит статический класс и решает, что Foo.Bar.Baz
является статическим классом, а не пространством имен.
Конечно, я мог бы просто переименовать статические классы что-то вроде менеджера, но тогда я бы еще прописать полный Baz.Manager.SomeMethod
и Quux.Manager.SomeMethod
в файлы, которые должны получить доступ вещи из обоих пространств имен. Это кажется довольно clumpsy, я бы предпочел, чтобы это было Baz.SomeMethod
и Quuz.SomeMethod
.
Любые идеи?
Моя идея состоит не в том, чтобы называть классы, подобные пространствам имен – Jehof
См. Http://blogs.msdn.com/b/ericlippert/archive/2010/03/09/do-not-name-a-class-the-same- as-its-namespace-part-one.aspx и последующих записей в серии. –
(Есть повторяющиеся вопросы, но у меня нет времени, чтобы найти их прямо сейчас.) –