我了解几个.NET中的Point
结构体: System.Drawing.Point
, System.Windows.Point
, Sys.UI.Point
,但它们都在高级UI库(GDI+, WPF, AJAX)中。我需要一个不依赖于任何特定UI技术的Point
结构体,用于我的类库计算。是否有任何独立于UI的Point
结构体在.NET中?或者我需要自己创建?这很简单,我知道,但听起来像是重新发明轮子。
Tuple
类,但是虽然它可以完成任务,但你不希望一遍又一遍地重复使用它。此外,根据你应用程序的具体情况,你可能会遇到比较问题。Point
类都是结构体是有原因的。通常情况下,它们的使用场景倾向于从结构体中受益,虽然并非在所有情况下都是这样,但这种差异仍然很重要。至于失去类型信息,你确实会失去它。当我看到一个 Tuple<int, int>
时,我不知道它代表坐标系中的哪个点。当我看到一个 Point
类时,我清楚它所表示的是哪个点。对于 Tuple
,我看不出哪个属性代表哪个维度,我只需要知道它即可,等等。 - Servy您可能希望使用System.Drawing.Point
或System.Drawing.PointF
。是的,它可以转换为适当的GDI+结构并从中转换,但本身它只是一个.NET结构体。它是纯托管结构体,而且恰好是COM可见和可转换的 :)
System.Drawing
几乎在任何情况下都会存在,即使在 Mono 中也是如此,所以为什么不使用它呢?它并不自动要求你使用 GDI+ 或其他任何东西。而且它是一个相当不错的基准“标准” Point。 - LuaanPoint
转换为GDI+ Point
,这对我来说似乎非常不自然,因为在UI和我的库中都没有其他用途使用GDI+。将其转换为特定于我的库的Point
似乎更合乎逻辑。 - Aleksey ShubinPoint
还是GDI+'s的PointF
,你都必须进行类型转换。而且我们讨论的是一个只有两个简单字段的结构体,真的很重要吗? - Luaan如果您不想创建自己的Point
类,可以考虑使用Tuple
类MSDN链接。您可以传递任何类型的坐标对给您的类库,而不是强制用户实例化一个新类。
但是,如果您想为库的使用者提供几个辅助方法,我建议创建自己的类。元组非常适合快速传递数据。
Tuple
。Tuple
本身没有意义。 - Adam HouldsworthX
和Y
属性的Point
类或结构的任何实现,显然.NET团队也没有。 - CodeCaster