C#:为什么尽管使用了完全限定名,但仍然需要完全限定名?

C#:为什么尽管使用了完全限定名,但仍然需要完全限定名?,c#,ios,namespaces,xamarin,using,C#,Ios,Namespaces,Xamarin,Using,我正在制作一个供自己使用的跨平台C#绘图库,以System.drawing为模型,使用尽可能多的标准System.drawing类型(如PointF、RectangleF、Color和Pen) 不幸的是,iOS上没有提供Pen类。因此,在为iOS编译时,我在System.Drawing中添加了这个,并设计为尽可能与标准System.Drawing.Pen类兼容。到目前为止还不错 今天,我添加了对线帽和连接样式的支持。在标准框架(但不在iOS上)中,它们在System.Drawing.Drawin

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

不幸的是,iOS上没有提供Pen类。因此,在为iOS编译时,我在System.Drawing中添加了这个,并设计为尽可能与标准System.Drawing.Pen类兼容。到目前为止还不错

今天,我添加了对线帽和连接样式的支持。在标准框架(但不在iOS上)中,它们在System.Drawing.Drawing2D命名空间中定义。所以,我添加了它们,同样是在只在iOS上编译的代码中:

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.)
        }
    }
}
现在我们来谈谈奇怪的一点。在我的主程序中,我试图使用所有这些,我在文件的顶部有“using System.Drawing;”。我发现,即使在iOS上,我现在也可以直接使用Pen:

Pen p = new Pen(Color.Yellow, 6);
但是,如果我尝试直接使用Drawing2D.LineCap,则会出现CS0103错误,“名称'Drawing2D'在当前上下文中不存在。”


p.StartCap=Drawing2D.LineCap.Round;// 不包括嵌套的名称空间:

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

所以你应该说:
如果要使用该类,请使用System.Drawing.Drawing2D

不包括嵌套名称空间:

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

所以你应该说:
使用System.Drawing.Drawing2D
如果你想使用这个类。

我说了:“使用System.Drawing;”。我说了:“使用System.Drawing;”。是的,这就是问题所在!非常感谢你指出这一点。是的,这就是问题所在!非常感谢你指出这一点。
p.StartCap = Drawing2D.LineCap.Round;   // <-- ERROR
p.StartCap = System.Drawing.Drawing2D.LineCap.Round;   // <-- OK (but sad)