C#中Class的实例化过程详解
前言
在平常开发的过程中,经常需要new 一个class,但是呢,由于忽略一些基础语法知识,不了解各成员的实例化顺序,导致代码中一些不必要的错误,所以在此做个总结!
一、class的成员
class 中的成员有:字段、常量、属性、方法、构造函数、事件、终结器、索引器、运算符、嵌套类型
关于成员详情可查:成员(C# 编程指南)
另外本文实例化过程会着重说明:静态字段,静态构造函数,实例字段,属性,构造函数 等几个常用成员的初始化过程。
二、实例化顺序(无继承情况)
在当前实例化的过程中也会分两种情况,
- 一种就是直接在声明变量的时候就初始化,如
private object obj = new object(); - 另一种就是申明的时候只管声明,初始化的工作均在构造函数中完成,如
private object obj ;
1.声明时进行初始化
代码如下(示例):
//该类仅用于打印实例化时候的信息,用于标记过程
public class Msg
{
public Msg(string info)
{
Console.WriteLine(info);
}
} public class User
{
public static Msg StaticField = new Msg("静态字段初始化");
private Msg privateField = new Msg("私有字段初始化");
private Msg _info;
public Msg Info
{
get
{
Console.WriteLine("进入get设置器");
return _info;
}
set
{
Console.WriteLine("进入set设置器");
_info = value;
}
}
static User()
{
Console.WriteLine("静态构造函数正在执行");
}
public User()
{
Console.WriteLine("构造函数正在执行");
}
}通过实例化User类,观察实例化过程:
static void Main(string[] args)
{
User user = new User();
Console.WriteLine("获取属性"+user.Info);
user.Info = new Msg("使用属性");
Console.ReadLine();
}通过以上案例可知实例化过程为:
- 静态字段
- 静态构造函数
- 实例字段
- 构造函数
- 属性则是在使用时会被初始化
2.在构造函数中初始化
在声明时不再初始化,统一在构造函数中初始化
public class User
{
public static Msg StaticField ;
private Msg privateField;
private Msg _info;
public Msg Info
{
get
{
Console.WriteLine("进入get设置器");
return _info;
}
set
{
Console.WriteLine("进入set设置器");
_info = value;
}
}
static User()
{
Console.WriteLine("静态构造函数正在执行");
}
public User()
{
Console.WriteLine("构造函数正在执行");
StaticField = new Msg("静态字段初始化");
privateField = new Msg("实例字段初始化");
}
}- 例字段=》构造函数
- 在构造函数之内的初始化顺序,就是按照代码的编写顺序执行。
- 属性则是在使用时会被初始化
三、实例化顺序(有继承情况)
public class User
{
public static Msg StaticField = new Msg("父类 静态字段初始化");
private Msg privateField = new Msg("父类 实例字段初始化");
private Msg _info;
public Msg Info
{
get
{
Console.WriteLine("进入get设置器");
return _info;
}
set
{
Console.WriteLine("进入set设置器");
_info = value;
}
}
static User()
{
Console.WriteLine("父类 静态构造函数正在执行");
}
public User()
{
Console.WriteLine("父类 构造函数正在执行");
}
}
public class VipUser : User
{
public static Msg StaticVipField = new Msg("子类 静态字段初始化");
private Msg privateVipField = new Msg("子类 实例字段初始化");
private Msg _vipInfo;
public Msg VipInfo
{
get
{
Console.WriteLine("进入get设置器");
return _vipInfo;
}
set
{
Console.WriteLine("进入set设置器");
_vipInfo = value;
}
}
public VipUser()
{
Console.WriteLine("子类 构造函数初始化完成");
}
}您可能感兴趣的文章
- 11-29C# 中的委托与事件机制详解
- 11-29C#中基数排序算法的原理及实现
- 11-29C#中计数排序算法的原理及实现
- 11-29C#实现线性搜索算法
- 11-29C#实现希尔排序算法的实践
- 11-29C#实现桶排序算法的示例代码
- 11-29C#实现广度优先搜索的实例代码
- 11-29C#中实现深度优先搜索
- 11-29C# 变量作用域常用说明小结
- 11-29详解C#中有趣的 SourceGenerator生成器


阅读排行
推荐教程
- 11-29C#自定义控件指示灯效果
- 11-29C#中计数排序算法的原理及实现
- 11-29C#解决Excel边框样式无法复制及格式刷功能
- 11-29C#实现线性搜索算法
- 11-29C#删除Word文档中的段落的方法示例
- 11-29C# System.Linq提供类似SQL语法的高效查询操作
- 11-29C#中基数排序算法的原理及实现
- 11-29C# WPF中实现图表生成的五种方式
- 11-29C#利用ms office实现office转pdf的示例代码
- 11-29C#实现身份证实名认证接口的示例代码






