谁知道c#使用 new 操作符构造新对象中做了一些什么 (简单版)
1个回答
展开全部
平时new算是使用非常频繁的一个关键字
这里只是描述 new object() 这种类型的作用
其他的暂时不涉及到,
本文的内容也比较简单,就列出了一些常用的流程
1.在第一次访问某个程序集的时候 (会加载对应的程序,例如需要new的对象在其他的dll里面)
其实步骤一中有很多其他的内容,不过这里就不详细描述了,因为用的比较少
如果找不到dll这个时候就会抛出异常
2.给所有静态成员赋值(static) 在c#中赋值的顺序看起来和代码从上至下的顺序一模一样,不过不保证以后的.net版本和编译器也是这样,因此不要依赖于代码的先后关系
3.调用静态构造函数(..ctor)
静态构造函数自始至终只调用一次. 如果如果要搞单例模式,放在这里初始化也是ok的,
静态构造函数如果抛出异常....那么在本次应用程序的生命周期中,这个类的所有成员将都不能访问,一访问就会抛出异常System.TypeInitializationException.
所以在静态构造函数中需要谨慎,最好是try catch,如果不是非常严重的错误的话.
第2点中说的先后关系可以放在构造函数中顺序执行
4.如果这个类有父类,那么先调用父类的构造函数,(如果父类还有父类,那么继续调用父类的父类的.......)
一路调用到最高级别,如果想调用父类的特定构造函数 可以使用base(.....)
5.初始化所有实例成员
6.如果存在this(...) 代表要先调用其他构造函数
7.最后开始调用构造函数
一般来说构造函数要尽量的轻量级,
这里只是描述 new object() 这种类型的作用
其他的暂时不涉及到,
本文的内容也比较简单,就列出了一些常用的流程
1.在第一次访问某个程序集的时候 (会加载对应的程序,例如需要new的对象在其他的dll里面)
其实步骤一中有很多其他的内容,不过这里就不详细描述了,因为用的比较少
如果找不到dll这个时候就会抛出异常
2.给所有静态成员赋值(static) 在c#中赋值的顺序看起来和代码从上至下的顺序一模一样,不过不保证以后的.net版本和编译器也是这样,因此不要依赖于代码的先后关系
3.调用静态构造函数(..ctor)
静态构造函数自始至终只调用一次. 如果如果要搞单例模式,放在这里初始化也是ok的,
静态构造函数如果抛出异常....那么在本次应用程序的生命周期中,这个类的所有成员将都不能访问,一访问就会抛出异常System.TypeInitializationException.
所以在静态构造函数中需要谨慎,最好是try catch,如果不是非常严重的错误的话.
第2点中说的先后关系可以放在构造函数中顺序执行
4.如果这个类有父类,那么先调用父类的构造函数,(如果父类还有父类,那么继续调用父类的父类的.......)
一路调用到最高级别,如果想调用父类的特定构造函数 可以使用base(.....)
5.初始化所有实例成员
6.如果存在this(...) 代表要先调用其他构造函数
7.最后开始调用构造函数
一般来说构造函数要尽量的轻量级,
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询