构造器的说明
有如下的代码,你看看有什么不同呢?
public class exam
{
public string xd;
}
public class exam1
{
public exam1(){}
public string xd;
}
exam ex = new exam();
exam1 ex1 = new exam1();
有什么不同呢?其实没有什么不同;在第一个类里面,没有构造器,在第二个类里有一个构造器.在运行期c#会自动为没有构造器的类加上一个无参数的构造,所以如果类的构造器是无参数的,可以省略.
构造器的分为静态和实例两种,静态构造器主要初始化类的静态成员,实例构造器初始化动态成员.构造器是在对象进行new时调用的.
再看下面的代码:
public class exam
{
public string xd;
public exam(){}
}
public class exam1
{
~ exam1(){}
public string xd;
}
exam ex = new exam();
exam1 ex1 = new exam1();
在第二个类里有这样一个构造器 ~exam1(){};正确的说,不叫构造器,叫析构器;那这样做有什么好处呢?还得从.Net的垃圾收集机制说起. .Net有一种自动收集垃圾的机制,这种自动收集机制,我可以通过调用system.gc.collect()方法手动实现,不过过于频繁的使用此方法会影响系统的性能.那么有两种替代方法一种是将类实现Idispose接口,第二种方法是将类声明成析构器,当我们执行了大量数据集合操作,确认不会再使用时,我们可以用dispose()方法将内存清空,不过这种方法在有些场合并不十分有效;如果我们不想手动清出垃圾;由系统决定清除,我们使用第二种方法,第二种方法是调用Finalize()方法,Finalize()方法是每一个类都有的.但我们即不能在外边调用,而是由系统决定调用.但需要注意的是,第二种方法中的垃圾清理原则是一定对象没有被调用,将会被清理.
public class exam
{
public string xd;
}
public class exam1
{
public exam1(){}
public string xd;
}
exam ex = new exam();
exam1 ex1 = new exam1();
有什么不同呢?其实没有什么不同;在第一个类里面,没有构造器,在第二个类里有一个构造器.在运行期c#会自动为没有构造器的类加上一个无参数的构造,所以如果类的构造器是无参数的,可以省略.
构造器的分为静态和实例两种,静态构造器主要初始化类的静态成员,实例构造器初始化动态成员.构造器是在对象进行new时调用的.
再看下面的代码:
public class exam
{
public string xd;
public exam(){}
}
public class exam1
{
~ exam1(){}
public string xd;
}
exam ex = new exam();
exam1 ex1 = new exam1();
在第二个类里有这样一个构造器 ~exam1(){};正确的说,不叫构造器,叫析构器;那这样做有什么好处呢?还得从.Net的垃圾收集机制说起. .Net有一种自动收集垃圾的机制,这种自动收集机制,我可以通过调用system.gc.collect()方法手动实现,不过过于频繁的使用此方法会影响系统的性能.那么有两种替代方法一种是将类实现Idispose接口,第二种方法是将类声明成析构器,当我们执行了大量数据集合操作,确认不会再使用时,我们可以用dispose()方法将内存清空,不过这种方法在有些场合并不十分有效;如果我们不想手动清出垃圾;由系统决定清除,我们使用第二种方法,第二种方法是调用Finalize()方法,Finalize()方法是每一个类都有的.但我们即不能在外边调用,而是由系统决定调用.但需要注意的是,第二种方法中的垃圾清理原则是一定对象没有被调用,将会被清理.

浙公网安备 33010602011771号