Как обращаться с тем же именем класса в разных пространствах имен?
Я пытаюсь создать общую библиотечную структуру. Я делаю это, создавая отдельные проекты для каждой общей библиотеки, которую я хочу
У меня есть следующие 2 пространства имен: MyCompany.ERP и MyCompany.Barcode
Мне нужно, чтобы оба они имели класс с именем "Утилиты" и были статическими. Если я сделаю это, мне нужно будет указать полное имя пространства имен перед моим статическим классом, чтобы получить к нему доступ.
Есть ли другой предпочтительный способ сделать это?
Или я должен использовать разные имена в классах, например BarcodeUtils и ERPUtils?
Ответы
Ответ 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. метод для удобства кода.