gpt4 book ai didi

C#:为什么尽管使用了完全限定名称?

转载 作者:行者123 更新时间:2023-11-28 18:33:07 25 4
gpt4 key购买 nike

我正在制作一个供自己使用的跨平台 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 namespace ;我给了它一个,所以有什么问题?

最佳答案

不包括嵌套命名空间。 Documentation :

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

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

关于C#:为什么尽管使用了完全限定名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24167379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com