回复 13楼 learnerok
这个正常,国内多数人学习C#之前,并没有讲过数据结构和windows win32编程。
所以理解GUI界面上面的东西估计会有一些难度。
1. namespace WindowsFormsApplication1 ---- 是命名空间,这个代码是IDE,就是你的VS帮你写上去的,创建工程的时候就会写好,所以不利于我们学习namespace关键字的用途。namespace这个关健字来自C++语言,主要用于划分大的模块,通常情况下,一个namespace命名空间会包含很多的类,类的实例,辅助方法(非类的成员),这么一个大的功能块用namespace进行包裹,主要防止全局命名污染,举个C语言的实例来说,你能在全局声名两个一样的函数名或变量名么?
#include <stdio.h>
void print(int x);
void print(int x); //能同时么?
int g_height;
int g_height; //能同时么?
int main()
{
return 0;
}
答案是不能。所以C++才会出现namespace关键字,这个关键字对于库开发者特别有用,而且可以跨文件,使得人们在开发库的时候,可以把不同的类代码放在不同的文件中,而他们处于同一个名字空间,就象在一个文件中声明一样。
所以namespace 后面跟的名字实际上是可以自己命名的。例如我们开发一个同时支持三个棋类游戏的程序,可以把三种棋类的类放进一个名字空间namespace ChessGame{ }中,使用时用using ChessGame.xxxx;来表示要使用名字空间里的类。
2. public partial class Form1 : Form ---- 声明一个“类”(form1类),它下面的花括号里面 又包含了1个类(TreeNode类)。
这个也是IDE帮你写的代码,所以你不清楚,一个windows程序倒底是如何生成的。当然,IDE帮你写的代码还不少,所以你会很迷乎这些类是如何来的。注意到下面这句
public Form1()
{
InitializeComponent();
}
了么?它也是IDE帮你写的,我们所有的程序运行都在幕后呢。右点InitializeComponent,选转到定义,你就可以看到IDE帮你写了多少代码,N多的类在里面实例化。partial关键字用于把类定义拆分为几个部分,便于代码管理,所以刚才你看到的N多的类实例化,就是分在了不同的文件中,InitializeComponent()方法里。public partial class Form1 : Form这句化是指你自己定义一个类,类名叫Form1,这个类名是可以改的,但同时你要修改整个项目的其它地方,Form1继承自Form,继承的意义不知道你学过没有?Form来自哪里?你可能会问,这是微软写的.NET类库中的一个类,就是窗体类,而程序的最上面的using System.Window.Form语句指示了这个类来自名字空间System.Window.Form里。同样你使用TreeNode类,这个类来自哪里,是你写的么?肯定不是,是微软写的一个类。不象我们的小猪类,全部是自己写的。因此昨天的学习实际上就是让你知道类是怎么抽象,怎么用代码实现的。
3. TreeNode类有2个属性(或称“实例化对象”?) ---- 一个是 treeNode,一个是departement ?
你应该明确的知道,TreeNode本身就是类,这个类的属性有哪些,你可以通过一个对象实例或是查找MSDN中找到,肯定不止二个。TreeNode treeNode = new TreeNode ("所有部门"); treeNode是TreeNode类的实例化对象。一般看到new关键字了,不用说,等号左边的肯定是对象。同理TreeNode departement= new TreeNode(department[i]);departement也是TreeNode类的实例化对象。treeNode.Nodes,注意,这里的Nodes才是TreeNode类的属性,而且是一个集合。add()是Nodes的方法,所以你可以调用,意思是把TreeNode的对象添加到Nodes集合中,当然,Nodes还不止add这个方法。集合是一个容器,通俗的讲,就象是一个蓝子,蓝子里面可以放鸡蛋对象。
4.TreeNode类的属性(或称“实例化对象”?) 的如下代码:
TreeNode treeNode = new TreeNode ("所有部门");
TreeNode departement= new TreeNode(department[i]);
上面两行也可以成为 “变量”?
也就是说 类的 属性、对象、变量,这三个东东是一回事?
这就是我们必须分清楚的东西,类,实际上称为类类型,和我们的值类型int实际上是一回事,我们用int i来声名一个变量i,和我们用类来声名一个类对象实际上表述是一回事,TreeNode treeNode;和i变量一样,只是左边的类型是TreeNode类类型,而i变量的类型是int,因此广义上的类也包括值类型,换句话说int也是类,它的方法就是+,-,*,/,%。等等,i + 10 = i.add(10)。所以对象和变量实际上是一回事,属性也是变量,只不过它属于类,类对象可以成为类的成员变量么?可以,看下面的代码:
class Leg //脚类
{
private int _legs; //脚数量。
public Leg(int x)
{
_legs = x;
}
}
class LittlePig //小猪类
{
private double height; //重量
private string name; //名字
private Leg leg; //脚
public LittlePig(string name, double height)//构造方法
{
this.name = name;
this.height = height;
leg = new Leg(4); //一个小猪有四条脚。
}
public double Height //height的属性
{
get { return height; }
set { this.height = value; }
}
public void eat() //吃方法
{
Console.WriteLine("{0} is eatting. ", name);
}
public void sleep() //睡方法
{
Console.WriteLine("{0} is sleepping.", name);
}
}
5.关于“方法”:
treeNode.Nodes.Add(departement); ----- treeNode 是 局部变量? Nodes 是属性? Add 是方法
treeView1.Nodes.Add(treeNode); ----- treeView1 是 类? Nodes 是属性? Add 是方法
首先我们要明白一个层次关系,树是由节点组成的,通常有一个根.
Root----node---node
|------node
|------node
|----node
treeView1 是类TreeView(控件)的对象实例,Nodes是一个TreeView类的(集合)属性,集合属于Collection类,都有添加,删除,插入方法,所以Add是方法。所以Nodes内部对应的变量又是Collection类的对象实例。这就是类与类之间复杂的关系,但这些复杂的关系最后概括出来,就两种,继承和组合。第四点已经给你示例了组合这个关系。
treeNode是类TreeNode的对象实例,也可以称变量,如果在局部声明就是局部变量,同理,Nodes和Add来自哪里,不用偶多说了吧?
[
本帖最后由 hellovfp 于 2011-12-27 13:03 编辑 ]