我正在制作一个跨平台的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.)
}
}
}
现在我们得到了奇怪的一点。在我的主程序中,我试图使用所有这些,我使用System.Drawing;"在文件的顶部。我发现即使在iOS上,我现在也可以直接使用Pen:
Pen p = new Pen(Color.Yellow, 6);
但是,如果我尝试直接使用Drawing2D.LineCap,我会收到一个CS0103错误,"名称' Drawing2D'在当前上下文中不存在。"
p.StartCap = Drawing2D.LineCap.Round; // <-- ERROR
为了使其有效,我必须完全限定名称,如下:
p.StartCap = System.Drawing.Drawing2D.LineCap.Round; // <-- OK (but sad)
所以,我想了解为什么会这样。我知道当有两个版本的东西时,可能需要一个完全限定的名称,因此编译器无法解决您的意思。但在这种情况下,我无法看到碰撞。据我所知,MonoTouch根本没有System.Drawing2D名称空间;我给它一个,那么问题是什么?
答案 0 :(得分:5)
不包含嵌套的命名空间。 Documentation:
&#34; using指令不允许您访问嵌套在您指定的命名空间中的任何命名空间。&#34;
所以你应该说:
using System.Drawing.Drawing2D
如果您想使用该课程。