- 浏览: 1763309 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (520)
- Oracle (10)
- Oracle错误集 (8)
- Oracle安装升级 (15)
- Oracle日常管理 (51)
- Oracle字符集 (7)
- Oracle备份恢复 (24)
- Oracle优化 (4)
- Oracle编程 (52)
- Oracle导入导出 (19)
- Oracle体系结构 (15)
- Oracle网络 (2)
- Oracle安全 (2)
- Oracle权限 (3)
- Oracle数据字典和性能视图 (2)
- Oracle常用地址 (5)
- SQLPLUS专栏 (7)
- SqlServer (13)
- SqlServer2005编程 (27)
- SqlServer2005管理 (15)
- MySQL (20)
- Dorado应用 (1)
- C# (24)
- Arcgis Server开发 (20)
- ArcSDE技术 (19)
- UML学习 (2)
- 设计模式 (2)
- JAVA EE (4)
- JavaScript (3)
- OFBIZ (27)
- JAVA WEB开发 (22)
- Linux&Unix (34)
- SHELL编程 (14)
- C语言 (11)
- 网络协议 (14)
- FREEMARKER (2)
- GROOVY (2)
- JAVA语言 (3)
- 防火墙 (0)
- PHP (2)
- Apache (2)
- Loader Runner (1)
- Nginx (3)
- 数据库理论 (2)
- maven (1)
最新评论
-
怼怼怼怼:
oracle的timestamp类型使用 -
怼怼怼怼:
oracle的timestamp类型使用 -
怼怼怼怼:
oracle的timestamp类型使用 -
pg_guo:
感谢
oracle中查看用户权限 -
xu234234:
5、MapResourceManager控件中添加了两个服务, ...
北京ArcGis Server应用基础培训笔记1
以前自己对这方面的内容一直比较模糊,只是知道一个大概的顺序,具体确切的执行顺序不能确定,于是抽空做了一个详细的测试,对其进行一番研究.
具体的程序代码比较简单,如下所示.
三个类分开来写的,一个父类,一个子类,一个测试类:
父类:
using System; namespace TestInherit { public class Father { public int father_a=111; public int father_aa=1111; public readonly int father_c=7777; public static int father_e=222; public static int father_ee; static Father() { father_e=5555; father_ee=3333; } public Father() { father_ee=4444; } public Father(int a) { father_a=a; } } }
子类:
using System; namespace TestInherit { public class Son:Father { public int son_int=9999; public static int son_b=111; public static int son_c; public Son() { son_c=222; } static Son() { son_c=333; } public Son(int a) { son_int=a; } } }
测试类:
using System; namespace TestInherit { class Class1 { [STAThread] static void Main(string[] args) { Son son1=new Son (); } } }
然后一路F11,进行跟踪,可以得到完整的执行顺序如下所示:
1.子类静态变量;
2.子类静态构造函数;
3.子类非静态变量;
4.父类静态变量;
5.父类静态构造函数;
6.父类非静态变量;
7.父类无参构造函数;
8.子类无参构造函数;
如果Main()方法中改为Son son1=new Son (111),顺序为;
1.子类静态变量;
2.子类静态构造函数;
3.子类非静态变量;
4.父类静态变量;
5.父类静态构造函数;
6.父类非静态变量;
7.父类无参构造函数;
8.子类有参构造函数;
如果子类的有参构造函数改为:
public Son(int a):base(a)
{
son_int=a;
}
则顺序又有所改变:
1.子类静态变量;
2.子类静态构造函数;
3.子类非静态变量;
4.父类静态变量;
5.父类静态构造函数;
6.父类非静态变量;
7.父类有参构造函数;
8.子类有参构造函数;
以上测试改为父类声明,子类实现,结果也是一样,即mian()方法中改为Father son1=new Son ();
最后作一个总结:
1.一般原理是被依赖的先构造,依赖于人的后构造,c#中是同层依赖(成员变量,其他的类变量等)优先于跨层依赖(父子关系)构造(注意java中正好相反);(子类的变量是不是可以理解为同层的依赖呢??)
2.静态构造函数,静态参数都是优先于非静态构造函数,非静态参数构造或初始化;
发表评论
-
C#正则表达式小结
2008-09-16 15:27 1624地址: http://www.cnblogs.com/m ... -
C#调用ORACLE存储过程返回结果集及函数
2008-07-22 17:49 3054ORACLE段: 首先在ORACLE建立PACKAGE和PA ... -
生成实体类的codesmith模版
2008-07-15 16:35 3186<%@ CodeTemplate Language=&q ... -
数据库开发个人总结(ADO.NET小结)(转)
2008-06-16 11:41 1999一.用SqlConnection连接SQL Server 1. ... -
ADO.NET—读书笔记系列
2008-06-16 11:37 1995ADO.NET概述 一、。NET数据提供程序 ... -
ADO.NET—DataHelper(转)
2008-06-16 11:24 3308using System; using System.Data ... -
ADO.NET—Asp.net 用DataSet对象更新数据(SqlDataAdapter)
2008-06-16 10:42 3563大家知道,DataSet保存的 ... -
一个简单的在程序中构造DataTable
2008-06-16 09:50 2442DataTable dt = new Data ... -
C# 中的委托和事件
2008-06-11 14:53 1124http://www.cnblogs.com/jimmyzha ... -
c#接口和抽象类的区别
2008-06-11 13:58 2608大家都容易把这两者搞 ... -
C#学习之接口
2008-05-26 16:17 1587什么是接口?其实,接 ... -
谈谈C#中的接口
2008-05-26 15:48 1297http://www.cnblogs.com/sifang20 ... -
C#构造函数
2008-05-26 15:27 4478一、C#构造函数?Construct,Function 构造函 ... -
C#继承小结
2008-05-26 14:48 16801、实例化父类时,可以使用new子类,执行构造函数顺序为:先执 ... -
C#修饰符
2008-05-26 14:30 2004符用于限定类型以及类型成员的申明,c#中有13种修饰符,按功能 ... -
C#命名规范
2008-05-26 13:49 2109注记 : Pascal 大小写形式 ... -
C#中处理xml文档
2008-05-26 11:53 1980C#下处理xml是通过XML.NET API类来实现的. XM ... -
在C#使用XML注释
2008-05-26 11:36 2675简介 大多数程序员可能都听说过Java自带的一个工具JavaD ... -
Visual C# 编译器 CSC.EXE 参数详解
2008-05-26 11:29 4718Visual C#是微软公司推出的新一代程序开发语言,Visu ... -
C# 语句-循环语句
2008-05-26 11:08 3276本文将介绍如何使用C#控制语句中的循环语句,本文目的如下: 1 ...
相关推荐
根据给定的信息,我们可以深入探讨C#中的构造函数与析构函数的概念,特别是关于它们的调用顺序以及如何实现继承中的构造。 ### C#中的构造函数 #### 构造函数的作用 构造函数是一种特殊的方法,用于初始化新创建的...
构造函数的执行顺序是从基类到派生类,确保所有层次的初始化都能正确进行。 #### 析构函数:清理非托管资源 **1. 原理与作用** 析构函数是一种特殊的成员函数,用于执行对象销毁前的清理工作,尤其是在处理非托管...
以下是关于C#静态构造函数的详细说明: 1. 访问性与参数: 静态构造函数没有访问修饰符,如public或private,因为它们由.NET框架自动调用。同样,它们也不接受参数,因为它们不用于创建实例,而是用于初始化类级的...
可以看到,执行顺序是:System.Object的构造函数、基类的构造函数、派生类的构造函数。 如果我们使用带参数的构造函数实例化MyDerivedClass,例如: MyDerivedClass myObj = new MyDerivedClass(4); 控制台输出...
在C#应用程序开发中,构造函数和析构函数是两个至关重要的概念,它们在对象生命周期管理中起到关键作用。下面将详细阐述这两个概念及其在C#中的应用。 首先,构造函数(Constructor)的主要职责是初始化类的新实例...
静态构造函数没有参数,不能被显式调用,会在类第一次被使用(如创建实例或访问静态成员)时自动执行。 例如: ```csharp class Employee { private static DataSet ds; static Employee() { ds = new DataSet(....
7. **执行顺序**:当有类继承关系时,基类的静态构造函数先于派生类的静态构造函数执行。 8. **不可显式调用**:由于静态构造函数由系统自动调用,我们无法在代码中显式地调用它,也无法控制它的执行时机。 9. **...
4. **构造函数重载**:在同一个类中,可以定义多个构造函数,只要它们的参数列表不同(参数数量、类型或顺序)。这称为构造函数重载,允许根据需要提供不同的初始化方式。 5. **构造函数链**:如果一个类继承自另一...
2. 创建一个新的`Thread`对象,将参数化的方法作为参数传递给构造函数: ```csharp object singleParam = "This is a single parameter"; Thread thread = new Thread(new ParameterizedThreadStart(ThreadMethod));...
3. **实例创建**:使用`new`关键字创建对象时,首先执行类的静态构造函数,然后执行实例构造函数。如果没有显式定义构造函数,编译器会提供一个默认的公共构造函数。如果定义了构造函数,不论是带参数还是无参数,都...
5. **构造函数**:创建派生类对象时,先执行基类的构造函数,然后执行派生类的构造函数,这是构造函数的调用顺序。 6. **隐式类型转换**:C#中,如果源类型能够自动转换为目标类型,就允许进行隐式类型转换。 7. *...
题目中关于先执行派生类构造函数的说法是错误的。 6. **隐式类型转换**: - 隐式类型转换是C#自动进行的类型转换,不需要显式声明目标类型。 7. **基类构造函数**: - 如果基类没有默认构造函数,派生类的构造...
静态构造函数的执行顺序是:静态变量 > 静态构造函数 > 实例变量 > 实例构造函数。 四、CTS、CLS、CLR CTS(Common Type System)是通用类型系统,用于定义公共的类型,然后翻译生成对应的.NET类型。CLS(Common ...
在这种情况下,必须确保静态构造函数的执行顺序正确,避免出现循环依赖的问题。 在上述例子中,x的值依赖于y的值(x=0+1=1),而y的值依赖于x的值(y=x+1=2)。由于静态构造函数的执行只进行一次,并且在类加载时就...
5. **构造函数执行顺序**:创建派生类对象时,先执行基类的构造函数,然后执行派生类的构造函数,这是C#构造器的基本规则。 6. **隐式类型转换**:隐式类型转换允许编译器自动完成类型之间的转换,如从较小的数据...
文档详细描述了类和对象的成员,如构造函数、方法、属性、索引器、事件等,以及如何在类中声明和使用这些成员。还包括了可访问性、静态与实例成员、虚方法、抽象方法等面向对象编程中的关键概念。 7. C#的词法结构...
`的执行顺序是先`c++`(此时c为9,然后加1变为10),再`5+c`(得到15),最后`d`等于15+10=25,所以输出为25。 8. 对数组的所有元素进行处理时,`foreach`循环是最方便的,它可以遍历数组中的每个元素。 9. 面向...