c#构造器的一点理解(一)
来源:互联网 发布:2333什么意思网络用语 编辑:程序博客网 时间:2024/06/05 18:03
c#的构造器分为三种
类型构造器
实例构造器 (引用类型,和值类型分别进行讲述)
引用类型的实例构造器 :
在创建类的实例的时候有下边三个步骤要做 1 分配数据字段的的内存 2 分配实例的系统开销内存(实例的指针,以及同步块索引) 2 调用构造器初始化实例的状态。
1 构造器不能被继承
2 如果没有显示声明类的构造器,那么clr自动构建一个无参的构造器。
3 构造器的可访问性为public。
4 一个类可以有多个实例构造器。 可以有不同的访问级别。
5 类的构造器在访问从基类继承过来的字段之前,必须调用基类的构造器。
6c#编译器提供了一种便利的语法: 为字段类型初始话 。
例如 : string str = “fuck” ;//碰到这种情况,要和构造函数联系起来考虑, 没有多大的实际意义,但是对你理解clr有好处
相当于string str ; 然后在构造函数里面 给字段赋值 str = “fuck” ;
这样那,你如果定义了多个构造器,那么在每个构造器里面都有 str = “fuck” ;这句话,会造成程序集变大,为了避免这种情况,我们在写程序的时候可以定义一个基准的构造函数,在这个构造函数里面对每个构造函数都要操作的字段进行赋值 ,然后在其他的构造函数里面调用这个基准的构造函数。具体的情况请参考下列的代码?
//学习this来调用构造函数sealed class secsonClass:baseClass{private string age ; //年纪private string height; //体重private string name ;public secsonClass() {age = "10" ;height = "100" ;name ="cicnor";}public secsonClass(string name):this() // 把这个函数看明白了,我上边说的那个情况你就明白了。{name ="cicn";}}引用类型的构造器函数我学习的过程的代码如下,请大家参考
using System;using System.Data;using System.Text;namespace myStu{/* c#中实例构造器的学习作用 : 初始化类的实例 ,使类的实例处于一个可以使用的状态。调用 : 当类进行实例化的时候调用构造器,具体点说就是使用new的时候。构造器被克隆的时候是不调用构造器的注意的几点 1 构造函数不能被继承。2 继承类的构造函数可以指定父类的构造函数3 如果继承类的构造函数没有指定父类的构造函数,那么就调用父类的无参构造函数。*/ /* 当实例化继承类的实例时候 ,1 首先是调用的基类的类型构造函数, 2 然后调用实例构造器, 3 最后调用子类的实例构造函数。如果继承类也有类型构造器,那么首先是调用继承类的类型构造器 顺序如下1继承类的类型构造器 (为什么首先调用继承类的类型构造器??? 有时间解决一下这个问题)2基类的类型构造器baseClass3基类的构造器3继承类的构造器*/class programe{ static void Main(string[] arg){try{ sonClass obj = new sonClass("") ; }catch (Exception err){Console.WriteLine(err.Message);}}} internal class baseClass {static string className;string instanceName;//基类的默认构造器public baseClass(){instanceName = "" ;Console.WriteLine("基类的构造器") ;}//基类的带参构造器public baseClass(string name){instanceName = name ;Console.WriteLine("基类的带参构造器") ;}//类型构造器static baseClass(){className = "baseClass" ;Console.WriteLine("基类的类型构造器" + className) ;//instanceName = "" ;} }//internal class sonClass :baseClass{//构造器不能被继承 必须指定子类的构造器调用父类的那个构造器,可以隐士调用,也可以显示调用父类的构造器。//注意 : 这样不是说明构造器可以被继承,而是说显示调用了父类的那个构造器。 public sonClass(string name ){Console.WriteLine("继承类的构造器") ;}static sonClass(){Console.WriteLine("继承类的类型构造器") ;}}//学习this来调用构造函数sealed class secsonClass:baseClass{private string age ; //年纪private string height; //体重private string name ; //如果父类有多个构造函数,那么这里是调用的那个基类的构造函数那?//经过试验证明 这里隐式调用的是父类的无参构造函数。//总结一句话 : 构造函数都会隐式调用父类的无参构造器。除非显示指定父类的构造器。public secsonClass( ) {age = "10" ;height = "100" ;name ="cicnor";}//这里有一个疑问 , 显示调用了,secsonClass 这个函数,我还可以显示调用基类的构造函数吗?public secsonClass(string name):this() {name ="cicn";}}}
运行结果如下 :
---------- run ----------=============== 运行C#程序 Write By 森晋科技===============继承类的类型构造器基类的类型构造器baseClass基类的构造器继承类的构造器=============== 程序结束 Copy cicnor 2001===============Output completed (0 sec consumed) - Normal Termination
- c#构造器的一点理解(一)
- c# 构造器的一点理解(2)
- c#构造器的一点理解(三)
- 对c#中的静态构造函数的一点理解
- C# abstract的一点理解
- Java构造方法继承的一点理解
- c# 构造函数的一点见解
- 对数据结构一点一小小的理解(一)
- C# 委托与事件的一点理解(1)
- C# 委托与事件的一点理解(2)
- C#委托与事件的一点理解(3)
- C#中foreach的一点理解
- 对C#委托的一点理解
- C#中线程锁的一点理解
- 对c++拷贝构造函数的一点理解
- 构造器的理解
- 关于Java构造器的一点归纳
- C# 静态构造函数(类型构造器)的要点
- windows句柄之实质
- Symbian中的Descriptor
- JAVA中File的相关操作
- 二分查找算法
- Linux数据结构
- c#构造器的一点理解(一)
- Proteus仿真之继电器驱动电灯泡
- Refactoring C# Code Using Visual Studio 2005 ----MSDN
- 那些把handle当指针用得大师们,醒醒吧
- Symbian中的ECom
- 谈谈对齐
- Symbian OS内存管理介绍
- Hibernate3.x过滤器中的高级应用
- 谈谈编码