将类名 = 命名空间,在使用

Putting a class name = namespace, in using

提问人:Angel Cloudwalker 提问时间:8/5/2016 更新时间:8/5/2016 访问量:290

问:

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

我从上面了解到现在可以使用BusinessTask类,但是我想知道作者可能没有提出的原因是什么:

using MyProject.WinService.Tasks.Core;

也许是要有选择性地暴露该位置,因为“核心”还有许多其他职业?

使用 using 指令 visual-studio C#-4.0

评论


答:

2赞 serhiyb 8/5/2016 #1

BusinessTask 可能存在于多个命名空间中。为了避免在每个 BusinessTask 用法附近指定完整的命名空间路径,您可以显式说:

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

编译器会知道,当你使用 BusinessTask 时,它应该从 MyProject.WinService.Tasks.Core 命名空间中获取它。

这里有一个很好的例子:如何处理不同命名空间中的相同类名?

评论

0赞 Angel Cloudwalker 8/5/2016
是的,所以基本上如果我只有:using using using MyProject.WinService.Tasks.Core;,那么在使用BusinessTask时,我将不得不使用完整的命名空间路径规范,对吗?
0赞 serhiyb 8/5/2016
正确,但仅当您引用/使用的不同命名空间中有 2+ 个同名类时。
0赞 Angel Cloudwalker 8/5/2016
好的,另外,通过阅读您的链接,如果我愿意,我也可以使用别名,不必与我假设的类同名。
0赞 serhiyb 8/5/2016
没错,您可以以不同的方式命名它们。
1赞 rory.ap 8/5/2016 #2

您可以使用类名别名来避免在另一个导入的命名空间中存在具有相同名称的类时发生名称冲突。即使您只是将别名称为与目标类相同的名称,它也会告诉编译器,每次您在该范围内使用类名时,您引用的都是别名。

在这里看到这个答案:https://softwareengineering.stackexchange.com/a/170839/144365

1赞 Zein Makki 8/5/2016 #3

我们面临的一种情况是,我们在同一个类中引用的两个命名空间中定义了一个类名。因此,我们不得不使用完全限定名称,因此代码原来是:

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 次后,在 using 中使用该别名使代码更具可读性。

假设在您的例子中,您需要引用一个定义名为“Task”类型的库。如果您需要在分类引用中使用它。您需要使用完全限定的名称或定义别名。System.Threading.TasksSystem.Threading.Tasks task = ....