[学习笔记][ASP.NET2.0][××× is ambiguous in the namespace×××]

博客介绍了命名空间导入的规则,它可导入命名空间或类型的所有成员,允许不加限定使用枚举成员,且在名称导入上不受限。当多个导入的命名空间含同名成员时会导致编译错误,可通过限定引用或引入导入别名解决,还指出只能导入特定类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出现这种错误提示的原因是需要通过以下的例子来解说:

“命名空间导入”导入命名空间或类型的所有成员,使得可以不加限定地使用命名空间或类型的每个成员的标识符。对于类型,命名空间导入只允许访问类型的共享成员,不要求限定类名。具体说来,它允许不加限定地使用枚举类型的成员。例如:

Imports Colors

Enum Colors
    Red
    Green
    Blue
End Enum

Module M1
    Sub Main()
        Dim c As Colors = Red
    End Sub
End Module

与导入别名不同,命名空间导入在导入的名称方面不受限制,可以导入标识符已在全局命名空间内声明的命名空间和类型。常规导入所导入的名称被源文件中的导入别名和声明隐藏。

在下面的示例中,A 是指 N3 命名空间中的成员声明内的 N3.A 而不是 N1.N2.A

Imports N1.N2

Namespace N1.N2
    Class A
    End Class
End Namespace

Namespace N3
    Class A
    End Class

    Class B
        Inherits A
    End Class
End Namespace 

当多个导入的命名空间中包含同名成员时(而且该名称没有以其他方式被导入别名或声明隐藏),对该名称的引用是多义的,将导致编译时错误。

Imports N1
Imports N2

Namespace N1
    Class A
    End Class
End Namespace 

Namespace N2
    Class A
    End Class
End Namespace 

Namespace N3
    Class B
        Inherits A ' Error, A is ambiguous.
    End Class
End Namespace

在上例中,N1N2 都包含成员 A。因为 N3 导入两者,所以在 N3 中引用 A 会导致编译时错误。在这种情况下,若要解决这种冲突,可以限定对 A 的引用,也可以引入挑选特定 A 的导入别名,如下例所示:

Imports N1
Imports N2
Imports A = N1.A

Namespace N3
    Class B
        Inherits A ' A means N1.A.
    End Class
End Namespace 

只能导入命名空间、类、结构、枚举类型和标准模块。

ImportsNamespaceClause ::= NamespaceOrTypeName
-------------
文档来自:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vbls7/html/vblrfvbspec5_2_2.asp
----------------------
注:ambiguous有“不明确”之意,当在同一个namespace中出现两个同名的class时,也会出现ambiguous错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值