Как обращаться с тем же именем класса в разных пространствах имен? - программирование
Подтвердить что ты не робот

Как обращаться с тем же именем класса в разных пространствах имен?

Я пытаюсь создать общую библиотечную структуру. Я делаю это, создавая отдельные проекты для каждой общей библиотеки, которую я хочу

У меня есть следующие 2 пространства имен: MyCompany.ERP и MyCompany.Barcode

Мне нужно, чтобы оба они имели класс с именем "Утилиты" и были статическими. Если я сделаю это, мне нужно будет указать полное имя пространства имен перед моим статическим классом, чтобы получить к нему доступ.

Есть ли другой предпочтительный способ сделать это?

Или я должен использовать разные имена в классах, например BarcodeUtils и ERPUtils?

4b9b3361

Ответ 1

Если я сделаю это, мне нужно будет указать полное имя пространства имен перед моим статическим классом, чтобы получить к нему доступ?

Нет, нет необходимости в этом, хотя детали зависят от класса, который будет использовать эти типы, и using деклараций, которые он имеет.

Если вы используете только один пространства имен в классе, нет никакой двусмысленности, и вы можете продолжить использование этого типа.

Если вы используете оба пространства имен, вам придется либо полностью квалифицировать использование, либо использовать псевдоним/тип псевдонимы, чтобы устранить неоднозначность типов.

using ERPUtils = MyCompany.ERP.Utilities;
using BCUtils = MyCompany.Barcode.Utilities;

public void MyMethod()
{
  var a = ERPUtils.Method();
  var b = BCUtils.Method();
}

Ответ 2

Нет другого пути. Вы можете создавать псевдонимы в директивах using:

using MC=MyCompany.ERP;
using MB=MyCompany.Barcode;
...
public void Test()
{
  var a = MC.Utilities.Method();
  var b = MB.Utilities.Method();
}

Это самый простой способ управлять ими.

Ответ 3

"Утилиты" - не очень хорошее имя для класса, поскольку оно слишком обобщенно. Поэтому, я думаю, вы должны переименовать их обоих в нечто более информативное.

Ответ 4

В рекомендациях MS есть следующее:

Не вводите типичные имена типов, такие как Element, Node, журнал и сообщение. Существует очень высокая вероятность того, что это приведет к конфликтам имен типов в общих сценариях.

и

Не указывайте одно и то же имя для типов в пространствах имен в рамках одной модели приложения.

Я согласен с тем, что лучше использовать BarcodeUtilities и ErpUtilities. (Если классы утилиты не предназначены для использования клиентским кодом, в этом случае вы можете назвать их Utilities и сделать их internal.)

Ответ 5

Вы можете использовать псевдоним:

using BarcodeUtils  =  MyCompany.Barcode.Utilities;

на страницах, с которыми вы сталкиваетесь. Но в идеале переименуйте их, если это происходит во многих местах.

Ответ 6

Я бы предложил использовать разные имена классов. Если вы действительно хотите вызвать оба из них "Утилиты", вы можете использовать функцию псевдонима в директиве using, например.

using ERP = MyCompany.ERP;
using Barcode = MyCompany.Barcode;

...
    ERP.Utilities.SomeMethod();
    Barcode.Utilities.SomeMethod();

Ответ 7

Вам нужно будет использовать полный путь, если оба названы одинаковыми. В противном случае вы получите неоднозначную ошибку ссылки.

Вы можете использовать псевдоним, однако это спасет вас от ввода:

using Project = PC.MyCompany.Project;

Я бы назвал другое имя, которое несколько более наглядно. А

Ответ 8

Фактически это зависит от цели ваших классов. Если вы собираетесь распространять свои Barcode.Utilities и ERP.Utilies отдельно, лучше оставаться таким. С другой стороны, если вы собираетесь использовать их только в том же классе, вы можете использовать 2. метод для удобства кода.