为什么这个名称空间正确解析?

rtp*_*rry 1 c#

我只是看一个项目,我看到一些我觉得不应该工作的工作.

如果你查看下面的代码片段,我就在命名空间中CustomFields.DateTimeField.Drivers,using该文件中唯一的其他语句是下面的 其他命名空间CustomFields.DateTimeField.

但是,如果你看起来public class DateTimeFieldDriver它是使用一种类型Fields.DateTimeField.

查看DateTimeField命名空间中的那个定义,CustomFields.DateTimeField.Fields但我只为其姐妹命名空间设置了uses.

所以问题是双重的 - 为什么这有效?这被认为是一种不好的做法吗?

有疑问的片段:

using System;
using JetBrains.Annotations;
using Orchard;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Drivers;
using Orchard.Localization;

using CustomFields.DateTimeField.Settings;
using CustomFields.DateTimeField.ViewModels;

namespace CustomFields.DateTimeField.Drivers {

    [UsedImplicitly]
    public class DateTimeFieldDriver : ContentFieldDriver<Fields.DateTimeField> {

        public IOrchardServices Services { get; set; }

        private const string TemplateName = "Fields/Custom.DateTime"; // EditorTemplates/Fields/Custom.DateTime.cshtml

        public DateTimeFieldDriver(IOrchardServices services) {

            Services = services;
            T = NullLocalizer.Instance;
        }
Run Code Online (Sandbox Code Playgroud)

如果你想对它进行调查,可以在这里下载项目(MVC2项目).

Kir*_*oll 5

例如,当您将代码声明为特定命名空间内时CustomFields.DateTimeField.Drivers,您也隐式导入所有"父"命名空间.

在这种情况下,你有一个暗示使用for CustomFieldsCustomFields.DateTimeField.这就是为什么你没有指定明确的using声明在类型CustomFields.DateTimeField,此外,对于子命名空间包含在其中.

因此,Fields.DateTimeField通过将发现CustomFields.DateTimeField(隐含的命名空间)与Fields.DateTimeField(显式的命名空间)解析到CustomFields.DateTimeField.Fields.DateTimeField.

不,据我所知,这不是一种不好的做法.