Помещение имени класса = пространства имен, при использовании

using BusinessTask =  MyProject.WinService.Tasks.Core.BusinessTask;

Я понимаю, что из приведенного выше класса BusinessTask теперь можно использовать, однако мне интересно, по каким причинам, возможно, автор просто не указал:

using MyProject.WinService.Tasks.Core;

Возможно, нужно быть избирательным в раскрытии этого места, поскольку в «Ядре» есть много других классов?


person MilesMorales    schedule 04.08.2016    source источник


Ответы (3)


BusinessTask может существовать в нескольких пространствах имен. Чтобы избежать указания полного пути к пространству имен рядом с каждым использованием BusinessTask, вы можете явно указать:

using BusinessTask =  MyProject.WinService.Tasks.Core.BusinessTask;

и компилятор будет знать, что когда вы используете BusinessTask, он должен выбрать его из пространства имен MyProject.WinService.Tasks.Core.

Вот отличный пример Как обрабатывать одно и то же имя класса в разных пространствах имен. ?

person serhiyb    schedule 04.08.2016
comment
Правильно, если бы у меня было только :using using MyProject.WinService.Tasks.Core;, мне пришлось бы использовать полную спецификацию пути к пространству имен при использовании BusinessTask, верно? - person MilesMorales; 04.08.2016
comment
Правильно, но только в том случае, если есть 2+ класса с одинаковым именем в разных пространствах имен, на которые вы ссылаетесь/используете. - person serhiyb; 04.08.2016
comment
ОК, и, кроме того, как я прочитал по вашей ссылке, я также могу использовать псевдоним, если захочу, он не должен называться так же, как класс, который я полагаю. - person MilesMorales; 04.08.2016
comment
Правильно, вы можете назвать их по-разному. - person serhiyb; 04.08.2016

Вы можете использовать псевдоним имени класса, чтобы избежать конфликтов имен, когда в другом импортированном пространстве имен есть класс с таким же именем. Даже если вы просто называете псевдоним тем же именем, что и целевой класс, это учит компилятору, что каждый раз, когда вы используете имя своего класса в этой области, вы имеете в виду тот, которому вы присвоили псевдоним.

См. этот ответ здесь: https://softwareengineering.stackexchange.com/a/170839/144365

person rory.ap    schedule 04.08.2016

Один случай, с которым мы столкнулись, заключается в том, что у нас есть имя класса, определенное в двух пространствах имен, на которые мы ссылаемся в одном и том же классе. Поэтому нам пришлось использовать полное имя, поэтому код получился таким:

public CompanyName.ProjectName.FeatureName.ClassName SomeMethod(object param1, 
                                                              object param2, object param3)
{


}

Что было очень непонятно. Поэтому мы заменяем это на

using SomeIdentifier = CompanyName.ProjectName.FeatureName;

Затем метод стал таким:

public SomeIdentifier.ClassName SomeMethod(object param1, object param2, object param3)
{


}

Использование этого типа примерно 10 раз в этом классе, использование этого псевдонима в использовании сделало код более читабельным.

Предположим, в вашем случае вам нужно сослаться на библиотеку, определяющую тип с именем «Задача». Если вам нужно использовать это внутри классификации, ссылающейся на System.Threading.Tasks. Вам нужно либо использовать полное имя System.Threading.Tasks task = ...., либо определить псевдоним.

person Zein Makki    schedule 04.08.2016