这周学习了一些有关类的知识
C#中的类和Java 中的基本相似, 有各种机制来保证程序设计中的安全性。
下面用一个简单的类Time类来举例
public class Time { public int month; public int year; public int day; }
当一个Time类的实例被创建的时候,该实例的变量month、year、day默认被赋值为0
Time t1= new Time();
这实际上是调用了C#缺省生成的构造函数,每一个类的实例被创建的时候,C#都会默认的生成生个一个缺省的构造函数,将所有的初始的数据类型的变量赋值为0或'\0',将其他变量的值赋值为空(null)。这样做最大的好处就是防止类的实例被创建的时候由于变量的某些值不可用而引发错误。
static void Main(string[] args) { Time t1= new Time(); Console.WriteLine("{0}, {1}, {2}",t1.year,t1.month,t1.day); }
当然我们也可以 自己创建一个类的构造函数
public Time(int year,int month,int day) { this.year = year; this.month = month; this.day = day; }
这里需要注意一下,这里的关键字this指的是Time类的一个实例,当函数的形参的名称与类中的变量名相同的时候this关键字的作用尤为重要,它可以告诉编译器这个变量名是属于类的,而非是函数中的形参。
Time t1= new Time(1,2,3)
在创建类的实例的时候调用这个构造函数就可以对其进行赋值了。
关于深拷贝与浅拷贝的问题,C#默认使用的是浅拷贝的方式,如果想要使用深拷贝,我们可以像这个样子定义一个构造函数
public Time(Time t) { year = t.year; month = t.month; day = t.day; }
这样我们就可以实现深拷贝的功能。
C#与Java一样自带垃圾回收机制,这样可以在很多情况下避免内存泄露的发生。
C#不允许声明全局变量和全局函数,变量和函数的声明和实现必须的类里完成,这一点与C++和Java有很大的不同,C#对类进行的封装更为具体、细致。