3

在我的 UI 类中,开发人员可以选择定义位置属性(System.Drawing.Point 的类型)。默认情况下,此属性初始化为 Point.Empty。类封装的内部代码使用 Point 属性的 .IsEmpty 来确定是否已设置位置。如果属性不为空,将使用 x/y 值。如果为空,代码将尝试将其与行/列算法一起放置。

我的问题:
我正在使用属性的 .IsEmpty 来确定它是否已设置。令我惊讶的是,如果开发人员将属性设置为 0,0,它会显示为 Empty。0,0 点在图形中有效。我也理解为什么 .IsEmpty 为 0,0 值返回 true。

1)没有创建我自己的类或从 System.Drawing.Point 继承,有没有办法知道是否设置了属性?

我能想到的唯一想法是将属性默认为“new Point(-1,-1)”并对其进行测试。有没有更好的办法?如果不是,请确认。

我在 Visual Studio 2005 和 Visual Studio 2008 中使用 C#

谢谢!

4

3 回答 3

5

有几种方法:

  1. 将属性设置为可空点,这样,当你没有设置它时,它将是“空”
  2. 通过将私有布尔字段设置为 true 来跟踪是否有任何东西调用了 setter 方法

IE。任何一个:

public Point? Location { ... }

或者:

public Point Location
{
    get ...
    set
    {
        _LocationSet = true;
        _Location = value;
    }
}
于 2009-11-20T21:10:09.913 回答
2

将字段保留为Point?( 的语法糖Nullable<Point>) 而不是Point. 这基本上可以跟踪该值是否是“真实的”一个空值。如何公开属性取决于您 -Point如果您尝试在不设置它的情况下获取它,您可以将其公开并使其抛出异常,或者您可以将其公开为Point?允许通过将其设置为“取消设置”稍后再次为空。

可空值类型正是为这种情况设计的。

于 2009-11-20T21:09:40.097 回答
1

我可能会考虑使用可为空的点:System.Drawing.Point?可以为 Null 提供更清晰的路径来了解是否设置了某些内容。

于 2009-11-20T21:10:45.650 回答