C#:为什么尽管使用了,却需要完全限定的名称
本文关键字:为什么 | 更新日期: 2023-09-27 18:08:05
我正在制作一个跨平台的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 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命名空间;我已经给了它一个,那么问题出在哪里呢?
不包括嵌套的名称空间。文件:
"using指令不允许您访问嵌套在指定命名空间中的任何命名空间。">
所以你应该说:如果要使用该类,请选择using System.Drawing.Drawing2D
。