C# c点课堂作业、家庭作业(非作弊)
我有个小问题。在我的家庭作业中,我必须创建并实现一个C# c点课堂作业、家庭作业(非作弊),c#,class,point,C#,Class,Point,我有个小问题。在我的家庭作业中,我必须创建并实现一个点类,它代表控制台屏幕上的点。它应该在控制台窗口的特定位置标记出字符“*”。例如,控制台页面的宽度应为80像素,最大高度应为49像素。赋值还有一个提示,提示我应该在MSDN中查找Console.SetCursorPosition()方法 那么,我已经走了多远?我创建了一个名为“点”的类,为协调器声明了2个int变量x和y,并创建了一个构造函数。但是我不确定构造器是否应该将这两个变量作为参数,以及它应该如何处理它们 注意:我不希望人们为我写这方面
点
类
,它代表控制台
屏幕上的点
。它应该在控制台
窗口的特定位置标记出字符“*”。例如,控制台
页面的宽度应为80像素,最大高度应为49像素。赋值还有一个提示,提示我应该在MSDN
中查找Console.SetCursorPosition()
方法
那么,我已经走了多远?我创建了一个名为“点”的类,为协调器声明了2个int
变量x和y,并创建了一个构造函数。但是我不确定构造器是否应该将这两个变量作为参数,以及它应该如何处理它们
注意:我不希望人们为我写这方面的全部代码;这不是我学习的方式。我写这篇文章是为了让在C#
方面比我更有经验的人能帮助我找到正确的方法 您说过您被引导到该方法-该页面,特别是示例部分,应该对您非常有用
对于你的班级来说,如果你发布了一些代码,那么给出建议就更容易了。在C#中,有几种常见的方法可以在类的实例上设置变量:如果是,您可以在上传递值并让构造函数进行赋值,或者如果是,您可以直接设置它们。通常,您会跌跌撞撞地进入有时会被宗教狂热讨论的领域。有些人提倡一个单阶段初始化过程,在这个过程中,构造函数总是产生一个有效且可用的对象,或者抛出一个异常。第二个想法是,构造函数为您提供一个“空白”对象,您可以稍后调用该对象,例如init()
方法。构造函数给出的对象将不可用。这将被称为两阶段初始化
我碰巧是在中间的某个地方,但倾向于一个阶段。有时两阶段初始化有它的应用程序,IMO在大多数情况下没有。其他答案建议将点
设置为不可变对象,在这种情况下,您必须使用构造函数初始化它
除了使对象不可变之外:如果没有充分的理由不在构造函数中初始化它,就不要这样做。如果不在构造中初始化值,则必须在初始化类之前检测类的使用情况(至少我会这样做,以防止出现错误),而不会从中获益
构造函数应该做什么:对照max/min值检查值并初始化字段。如果超出范围,则抛出异常。
如果对象是可变的,不要忘记在set方法中执行相同的操作
在这种情况下,您可以考虑使用属性并使类不可变,如他的回答中的CODESSIN混沌。
IMO。表示位置的类应该是不可变的值对象,因此它应该得到值语义。
我要做的是:
- 创建一个类
ConsolePoint
- 必须
private readonly int
字段来存储坐标值
- 有两个公共属性,其getter返回字段的值,而不是setter
- 拥有一个构造函数,该构造函数接受这两个坐标,如果它们无效,则抛出
ArgumentOutOfRangeException
,然后分配给字段
然后实现价值平等:
- 覆盖
等于
和GetHashCode
- 重载
==
和=代码>
这四点应该是一致的
但是,如果您喜欢可变类,我将创建两个可变字段和两个属性,它们的setter将验证坐标。由于这两个坐标的验证是独立的,因此这种方法效果很好。在这种情况下,我只使用默认构造函数。有很多可能性。一种方法是编写一个构造函数,它接受两个参数,这两个参数对应于类中的两个字段x
和y
。然后,构造函数“body”应将第一个参数指定给x
,将第二个参数指定给y
请注意,如果您选择将构造函数参数命名为与字段完全相同的名称,则标识符x
指的是参数,而不是字段。在这种情况下,您需要编写this.x
来引用该字段。如果您发布您创建的所谓代码,您将保持开放时间更长,获得更少的反对票。它将展示一些善意,让人们看到你确实做了一些事情。那么你在MSDN中查找了控制台.SetCursorPosition()
方法了吗?@AbZy如果与他的问题无关,他为什么要查看控制台.SetCursorPosition()
方法呢?问题是关于对象成员的架构和初始化,而不是背景故事?@AndreasWallner OP说:在赋值上还有一个提示,wich说我应该寻找控制台。SetCursorPosition()方法。
@AbZy我仍然不知道该页面如何帮助回答这个问题。在C#中,您的成员保证被初始化为0。。因此,一个点在没有构造函数参数的情况下是有效的(除非出于某种原因0,0无效)。此外,正如CodesInChaos所提到的,这样的结构确实应该是不可变的(没有您建议的setter方法)。@SimonWhitehead感谢您的提示。。。我不知道C#中的成员保证被初始化为0,我将相应地更改我的答案。我不知道控制台.SetCursorPosition
文档如何回答在任何方面提出的问题。你是对的,虽然OP应该发布一些cod