继续编写贪吃蛇继续学习心的东西,发现新的问题。
一. C#中static关键字的使用
由于C#程序是以类为基本结构实现的,因此C#中不存在独立于类外的函数(至少我这么认为),static在函数中的使用方法在C#中不再有意义
。而static在类中的两种基本使用方法并没有什么变化,这两种基本方法是静态成员函数和静态成员变量,与C++相同,静态成员函数属于类而不
属于对象,无法使用对象来改变其内容,与C++不同的是,静态成员变量的初始化可以在声明的同时进行,不必再采用类外负值的方法进行初
始化(实际上也不可能实现类外赋值,因为C#中类是基本结构,除了类没别的~~~)。静态成员函数是可以直接通过类来调用的函数,不能通过
类所创建的对象来访问,静态成员函数只能使用静态成员变量而不能使用其他变量。在C#中,可以通过static声明静态类,这个概念在C++中没有
。静态类中只有静态成员变量和静态成员函数,不允许有其他类型的变量和函数。静态类具体应该如何应用还需要以后进一步了解。
二.object类型
object是一个通用的数据类型,它可以包含任何一种数据类型,不论这种类型是系统类型还是用户自定义类型。将其他类型的变量赋值给
object类型的变量时,系统需要对前者进行类型检查,以便能够给object类型分配足够的空间以容纳前者,这种操作被称为“装箱”。“装箱”操作的
基本过程是:首先为object分配一个引用,然后根据要“装箱”的变量类型在“堆”内分配足够大的空间,并将该变量的内容拷贝到堆中,最后将
object引用指向这个堆空间,完整“装箱”。与之相对应的是”拆箱“操作,即将一个已装箱的object类型强制转换为装箱前的原始类型。
装箱:
int i=10;
object o=i;
拆箱:
int i=10;
object o=i;
int j=(int)i; //拆箱
由于”装箱“和”拆箱“操作需要做大量的匹配性检查工作,因此这种操作对性能有比较严重的影响,代替这两种操作的方法是”泛型“,以后学到再
议。
三. 写程序时用到的方法:
1. 取绝对值: System.Math.Abs(); 注意不能试图在前面 using System.Math,因为Math不是命名空间。
2. 对于容器类型List,Stack等等,foreach(类型 类型变量 in 容器){... } ,该函数通过类型变量逐个调用了容器中数据,在{}中可以利用类型变量对每
项进行处理。
3. 清除场景上的绘图:设场景为标准窗口,设
class frmDC:Form{
...
}
则,frmDC.Refresh()函数可以实现清屏。
另外到目前为止,在C#的类中还没有看到析构函数,由于析构函数在类的应用中意义重大,因此C#中不太可能取消析构函数,让程序员主动析
构又太不可思议,我猜C#中可能会有一种更先进的析构方法存在。
一. C#中static关键字的使用
由于C#程序是以类为基本结构实现的,因此C#中不存在独立于类外的函数(至少我这么认为),static在函数中的使用方法在C#中不再有意义
。而static在类中的两种基本使用方法并没有什么变化,这两种基本方法是静态成员函数和静态成员变量,与C++相同,静态成员函数属于类而不
属于对象,无法使用对象来改变其内容,与C++不同的是,静态成员变量的初始化可以在声明的同时进行,不必再采用类外负值的方法进行初
始化(实际上也不可能实现类外赋值,因为C#中类是基本结构,除了类没别的~~~)。静态成员函数是可以直接通过类来调用的函数,不能通过
类所创建的对象来访问,静态成员函数只能使用静态成员变量而不能使用其他变量。在C#中,可以通过static声明静态类,这个概念在C++中没有
。静态类中只有静态成员变量和静态成员函数,不允许有其他类型的变量和函数。静态类具体应该如何应用还需要以后进一步了解。
二.object类型
object是一个通用的数据类型,它可以包含任何一种数据类型,不论这种类型是系统类型还是用户自定义类型。将其他类型的变量赋值给
object类型的变量时,系统需要对前者进行类型检查,以便能够给object类型分配足够的空间以容纳前者,这种操作被称为“装箱”。“装箱”操作的
基本过程是:首先为object分配一个引用,然后根据要“装箱”的变量类型在“堆”内分配足够大的空间,并将该变量的内容拷贝到堆中,最后将
object引用指向这个堆空间,完整“装箱”。与之相对应的是”拆箱“操作,即将一个已装箱的object类型强制转换为装箱前的原始类型。
装箱:
int i=10;
object o=i;
拆箱:
int i=10;
object o=i;
int j=(int)i; //拆箱
由于”装箱“和”拆箱“操作需要做大量的匹配性检查工作,因此这种操作对性能有比较严重的影响,代替这两种操作的方法是”泛型“,以后学到再
议。
三. 写程序时用到的方法:
1. 取绝对值: System.Math.Abs(); 注意不能试图在前面 using System.Math,因为Math不是命名空间。
2. 对于容器类型List,Stack等等,foreach(类型 类型变量 in 容器){... } ,该函数通过类型变量逐个调用了容器中数据,在{}中可以利用类型变量对每
项进行处理。
3. 清除场景上的绘图:设场景为标准窗口,设
class frmDC:Form{
...
}
则,frmDC.Refresh()函数可以实现清屏。
另外到目前为止,在C#的类中还没有看到析构函数,由于析构函数在类的应用中意义重大,因此C#中不太可能取消析构函数,让程序员主动析
构又太不可思议,我猜C#中可能会有一种更先进的析构方法存在。