2013-08-01 145 views
-2

我是C#的新手。
在窗体设计中让我们说我有一个文本框,列表视图和一个按钮。 我写的代码像这样的按钮:有什么区别C#

listBox1.Items.Add(textBox1.Text); 

...这将只是添加从文本框中的文本到ListView中。

另一种方法是:

我创建了一个Person.cs类,并在那里我添加此

string FirstName; 
public string FN { 
    get { return FirstName; } 
    set { FirstName = value; } 
} 

,按钮上我补充一点:

Student NewStudent = new Student(); 
NewStudent.FN = textBox1.Text; 
listBox1.Items.Add(NewStudent.FN); 

这两个会做同样的事情。
第一个只需要一行代码,但第二个是几行。为什么不使用只需要一条线的第一个?

+0

拿起一本关于面向对象设计的好书。文本框不应该被用作变量。 – CodeCaster

回答

6

因为你可能想在构造合适的对象,而不是记住一个StudenttextBox1.Text它的名字,在textBox4.Text其姓氏,而其numericUpDown15.Value年龄你的程序的数据。当你有两个学生在表格上,每个都有自己的名字,但在不同的文本框(在textBox7textBox15 ?,学生1的名字?通常我会说你应该避免这种情况。

当您使用数据对象时,如果您没有可用的GUI(如后端代码,从文件解析数据等)时,也可以自由使用它们。将文本框放入文本框中即可工作与他们听起来有点麻烦,对不对?

如果你走的路线(与数据对象),你可能也想使用数据绑定,它告诉输入和显示控制他们从哪里获取数据。您可以将您的文本框直接绑定到Student实例的FN属性,并且您不必编写任何代码来实现值更新。当您直接将Student实例放入列表(或者您可以将列表框绑定到学生集合)时,您也可以告诉列表框它应该显示FN属性的值。

你也可以模拟你的Student类是这样的:

class Student 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string FullName { get { return FirstName + " " + LastName; } } 
} 

,然后绑定两个文本框FirstNameLastName,而列表框中显示FullName

1

他们根本不会做同样的事情。可见的效果可能是相同的,但这不是整个故事。

你在第二个例子中做的是创建一个Student类型的新对象。在大多数情况下,这个类不会仅包含一个FirstName字段,但可能包含有关该学生的各种其他信息。此外,你很可能会将新的Student对象添加到集合中,以便稍后进行更有意义的处理。 (例如,添加学生可以订阅的课程对象,或以某种方式绑定到学生的成绩对象集合。

这是“正确”的方式来完成这完全取决于你想要你的程序做什么。

0

我不知道你在努力完成什么,但是一行是绝对合法的。 sesond方法在需要将相关数据存储在内存中的情况下是有意义的,例如,额外的姓氏,以便您的数据不会遍布整个地方。它还可以轻松创建该(相关)数据的列表。

0

您可能需要使用表单2上的用户名,其中textbox.text不可用,那么您可能需要一些手段来保存信息。那就是你需要使用结构数据对象的地方。

让用户有适当的实体允许一次容纳多个用户,而使用List但是为多个用户提供文本框不是一个好主意。

public class User 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string FullName { get { return FirstName + " " + LastName; } } 
} 

这只是数百万个适当面向对象代码的一个优点。