c#使用指令深度

时间:2011-07-20 18:32:29

标签: c#

我正在尝试理解c#using指令......为什么这样做......

using System;
using System.ComponentModel.DataAnnotations;
namespace BusinessRuleDemo
{
    class MyBusinessClass
    {
        [Required]
        public string SomeRequiredProperty { get; set; }
    }
}

但这不是吗?

using System;
using System.ComponentModel;
namespace BusinessRuleDemo
{
    class MyBusinessClass
    {
        [DataAnnotations.Required]
        public string SomeRequiredProperty { get; set; }
    }
}

第二个导致编译错误“无法找到类型或命名空间DataAnnotations。您是否缺少使用指令或程序集引用?

2 个答案:

答案 0 :(得分:7)

using指令可以使用您指定的命名空间中的类名作为其参数。由于DataAnnotations不是类,而是命名空间,因此在第二种情况下无法访问它。您应该使用完全符合条件的类名NS1.NS2.Class1,或者使用NS1.NS2开始编程;然后使用Class1。

答案 1 :(得分:1)

因为您可以使用Fully Qualified Class Names或只使用ClassName并让.NET通过using指令解析它。没有中间立场。

Class1 -

NameSpace1.NameSpace2.NameSpace3.Class1

可以作为

访问
using NameSpace1.NameSpace2.NameSpace3;
...
... Class1.DoSomething();
...

...
NameSpace1.NameSpace2.NameSpace3.Class1.DoSomething();
...

但不喜欢

using NameSpace1.NameSpace2;
...
NameSpace3.Class1.DoSomething();
...

在最后一种情况下,编译器实际上要查找的是根命名空间NameSpace3,它显然不存在。它不会尝试查找System.NameSpace3NameSpace1.NameSpace3NameSpace1.NameSpace2.NameSpace3等等。