【发布时间】:2014-08-01 18:34:01
【问题描述】:
我正在制作一个跨平台的 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 命名空间。我给了它一个,那有什么问题?
【问题讨论】:
-
我做了:“使用 System.Drawing;”。
标签: c# ios namespaces xamarin using