首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#:为什么要使用完全限定的名称?

C#:为什么要使用完全限定的名称?
EN

Stack Overflow用户
提问于 2014-06-11 15:52:16
回答 1查看 434关注 0票数 0

我正在制作一个跨平台的C#绘图库,供我自己使用,它以System.Drawing为模型,使用尽可能多的标准System.Drawing类型(如PointF、RectangleF、Color和Pen)。

不幸的是,iOS上没有提供钢笔类。因此,在为iOS编译时,我在System.Drawing中添加了这样的内容,并设计成尽可能与标准的System.Drawing.Pen类兼容。到目前一切尚好。

今天,我增加了对线帽和连接样式的支持。在标准框架(但不是在iOS上)中,这些都是在System.Drawing.Drawing2D命名空间中定义的。因此,我再次将它们添加到仅在iOS上编译的代码中:

代码语言:javascript
复制
namespace System {
    namespace Drawing {
        namespace Drawing2D {
            public enum LineCap {
                Flat,
                Round,
                Square   // (etc.)
            }
        }
    public class Pen {
        public Color Color;
        public float Width;
        public Drawing2D.LineCap StartCap;
        public Drawing2D.LineCap EndCap;
        // (etc.)
        }
    }
}

现在我们到了奇怪的地方。在我的主程序中,我试图使用所有这些,在文件的顶部有“使用System.Drawing;”。我发现,即使在iOS上,我现在也可以直接使用钢笔:

代码语言:javascript
复制
Pen p = new Pen(Color.Yellow, 6);

但是,如果我试图直接使用Drawing2D.LineCap,就会得到一个CS0103错误,“名称'Drawing2D‘在当前上下文中不存在。”

代码语言:javascript
复制
p.StartCap = Drawing2D.LineCap.Round;   // <-- ERROR

为了使它发挥作用,我必须完全限定其名称,如下所示:

代码语言:javascript
复制
p.StartCap = System.Drawing.Drawing2D.LineCap.Round;   // <-- OK (but sad)

所以,我想知道这是为什么。我知道,当有两个版本的东西时,可能需要一个完全限定的名称,所以编译器无法计算出您的意思。但我看不出这件案子的碰撞。据我所知,MonoTouch根本没有System.Drawing2D名称空间;我给了它一个名称空间,那么问题是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-11 15:57:16

不包括嵌套的命名空间。文档

“使用指令不允许您访问嵌套在指定名称空间中的任何命名空间。”

因此,您应该说:如果您想使用该类,请使用using System.Drawing.Drawing2D

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24167379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档