点的双坐标的最佳实践

8

有一个 System.Drawing.Point,它接受 int 值作为 XY 坐标参数。
但这不是我需要的。

然后有一个 System.Windows.Point,它接受 double 值作为 XY。这是我需要的,但我不确定在类库项目中是否应该使用这个结构。

最后,我找到了 System.Drawing.PointF,但它接受 float 值作为 XY 坐标参数。我更喜欢使用 double

什么是最佳实践?

进一步说明:

基本上,我有一个 WPF 项目和一个类库项目,类库项目作为 UI 的模型。我需要在模型中记住矩形坐标 (double, double)。


5
你打算在哪里使用它们?你提到的那些类存在(大概)是因为它们对应于那些API需要的类型。如果你在做自己的事情,难道不能定义自己的类吗? - Oliver Charlesworth
我的意图不是在有多个选项时定义某个东西。基本上,我有一个WPF项目和一个Class Library项目,它作为UI的模型。我需要在模型中记住Rectangle坐标(double,double)。 - Boris
使用自己的类的另一个优点是,您可以根据需要将其转换为/从其他类。如果您的模型需要一个Point类,则不需要从框架中依赖图形库。换句话说,它提高了解耦性。 - philologon
3个回答

5
如果您没有使用System.DrawingSystem.Windows中的其他内容,请自己实现一个使用双精度值的PointD。我在以前的项目中也这样做过...这应该不是什么大问题。

如果您需要它与 PointFPoint 兼容,您可以根据需要使用适当的截断/四舍五入逻辑使其继承这些。 - Jeff B
5
晚来一步,但我想指出那些是“结构体”,无法被继承。 - djv

3
如果您使用GDI+(Windows Forms中经常使用的原生API),则必须使用System.Drawing.Point或System.Drawing.PointF。 System.Windows.Point仅用于WPF。因此,并没有“最佳实践”,这取决于您想创建哪种类型的应用程序。
如果您需要一个与WPF或GDI+无关的点结构,请创建自己的结构。

虽然 GDI+ 类型会强制依赖 GDI+ 库,即 System.Drawing.dll,但是 System.Windows.Point 的依赖影响略微较小:Microsoft 将该类型放在 WindowsBase.dll 中,以使您能够在不依赖 WPF(位于 PresentationCore.dllPresentationFramework.dll 中)的情况下使用它。 - Ian Griffiths
@IanGriffiths,严格来说,你是正确的,但我不确定只有WindowsBase.dll能做什么... 我认为它只被WPF使用。 - Thomas Levesque
我稍微更新了一下问题。我的需求是在我的类库模型项目中记住 WPF 项目中的 Rectangle 坐标。 - Boris
2
我之前在几个项目中只使用了 WindowsBase.dll,原因就是我需要 PointRect(包括一些相关的实用函数)。这些都只是为了内部使用,所以我们引用的依赖不会真正影响其他人,但事实证明,我们最终确实使用了 WindowsBase 而不是 WPF。所以这种情况可能会发生。 - Ian Griffiths

0

在能够将双精度值转换为浮点数的情况下,使用Vector2(System.Numerics),其中将其转换为整数会使您丢失小数部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接