c#点课作业,作业(不作弊)

时间:2013-02-02 14:37:08

标签: c# class point

我有点问题。在我的家庭作业中,我必须在Point屏幕上创建并实施代表class的{​​{1}} point。它应该在console窗口的特定位置标出字符“*”。例如,console页面应为80像素宽,最大高度应为49像素。还有一个暗示,我说应该在console中寻找Console.SetCursorPosition()方法。

那么,我到底有多远?好吧,我创建了一个名为“point”的MSDN,为协调器声明了2 class个变量x和y,并创建了一个构造函数。但我不确定构造函数是否应该将这两个变量作为参数,以及它应该如何处理它们。

注意:我不希望别人给我写完整个代码;这不是我学习的方式。我写在这里,所以在int比我更有经验的人可以帮助我指导我正确的方式。

4 个答案:

答案 0 :(得分:1)

IMO表示一个位置的类应该是一个不可变的值对象,所以它应该得到值语义。

我要做什么:

  • 创建课程ConsolePoint
  • 必须private readonly int个字段才能存储坐标值
  • 有两个公共属性,其getter返回字段的值,没有setter
  • 有一个构造函数,它接受两个坐标,如果它们无效则抛出ArgumentOutOfRangeException,然后分配给字段。

然后实现价值平等:

  • 覆盖EqualsGetHashCode
  • 超载==!=

所有这四个都应该是一致的。


但是如果你更喜欢一个可变类,我会创建两个可变字段,以及两个安装程序验证坐标的属性。这很有效,因为两个坐标的验证是独立的。在那种情况下,我只使用默认构造函数。

答案 1 :(得分:0)

您说您被定向到Console.SetCursorPosition方法 - 该页面,特别是示例部分,应该对您非常有用。

就您的课程而言,如果您发布了一些代码,那么提供建议会更容易。在C#中,有几种常见的方法可以在类的实例上设置变量:如果它们是fields,您可以在constructor上传递值并让构造函数执行赋值,或者如果它们是properties你可以直接设置它们。

答案 2 :(得分:0)

一般来说,你磕磕绊绊地进入有时以宗教热情讨论过的领土。有些人提倡单阶段初始化过程,其中构造函数始终生成有效且可用的对象或抛出异常。第二个想法是构造函数给你一个“空白”对象,你可以调用它稍后使用init()方法。该对象不能像构造函数给出的那样可用。这将被称为两阶段初始化。

我碰巧在中间的某个地方,但倾向于单阶段初始化。有时两阶段初始化有它的应用程序,IMO在大多数情况下它没有。其他答案建议使Point成为不可变对象,在这种情况下,您必须使用构造函数初始化它。

除了使对象不可变之外:如果没有充分的理由在构造函数中初始化它,请不要这样做。如果你没有在构造中初始化值,你必须在初始化之前检测类的使用(至少我会这样做,以防止错误发生),而没有它的优势。

构造函数应该做什么:根据max / min值检查值并初始化字段。如果超出界限,则抛出异常。 如果你的对象是可变的,不要忘记在你的set方法中做同样的事情。

在这种情况下,您可以考虑使用属性并使类不可变,如CodesInChaos在其答案中描述的那样。

答案 3 :(得分:0)

有很多种可能性。一种方法是编写一个构造函数,该构造函数接收两个参数,这两个参数对应于您的类中的两个字段xy。然后,构造函数“body”应将第一个参数分配给x,将第二个参数分配给y

请注意,如果您选择将构造函数参数命名为与字段完全相同,则标识符x引用参数,而不是字段。在这种情况下,您需要编写this.x来引用该字段。