设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

查看: 1264|回复: 1

C#中Class的实例化过程详解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:237
  • 打卡月天数:1
  • 打卡总奖励:3608
  • 最近打卡:2025-12-05 12:55:46
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
372
主题
347
精华
0
金钱
4727
积分
798
注册时间
2022-12-30
最后登录
2025-12-5

发表于 2024-11-4 14:21:40 | 显示全部楼层 |阅读模式
目录


  • 前言
  • 一、class的成员
  • 二、实例化顺序(无继承情况)

    • 1.声明时进行初始化
    • 2.在构造函数中初始化

  • 三、实例化顺序(有继承情况)
  • 结语

前言

在平常开发的过程中,经常需要new 一个class,但是呢,由于忽略一些基础语法知识,不了解各成员的实例化顺序,导致代码中一些不必要的错误,所以在此做个总结!

一、class的成员

class 中的成员有:字段、常量、属性、方法、构造函数、事件、终结器、索引器、运算符、嵌套类型
关于成员详情可查:成员(C# 编程指南)
另外本文实例化过程会着重说明:静态字段,静态构造函数,实例字段,属性,构造函数 等几个常用成员的初始化过程。

二、实例化顺序(无继承情况)

在当前实例化的过程中也会分两种情况,

  • 一种就是直接在声明变量的时候就初始化,如
    1. private object obj = new object();
    复制代码
  • 另一种就是申明的时候只管声明,初始化的工作均在构造函数中完成,如
    1. private object obj ;
    复制代码

1.声明时进行初始化

代码如下(示例):
  1.         //该类仅用于打印实例化时候的信息,用于标记过程
  2.     public class Msg
  3.     {
  4.         public Msg(string info)
  5.         {
  6.             Console.WriteLine(info);
  7.         }
  8.     }
复制代码
  1.     public class User
  2.     {      
  3.         public static Msg StaticField = new Msg("静态字段初始化");
  4.         private Msg privateField = new Msg("私有字段初始化");
  5.         private Msg _info;

  6.         public Msg Info
  7.         {
  8.             get
  9.             {
  10.                 Console.WriteLine("进入get设置器");
  11.                 return _info;
  12.             }
  13.             set
  14.             {
  15.                 Console.WriteLine("进入set设置器");
  16.                 _info = value;
  17.             }
  18.         }

  19.         static User()
  20.         {
  21.             Console.WriteLine("静态构造函数正在执行");
  22.         }

  23.         public User()
  24.         {
  25.             Console.WriteLine("构造函数正在执行");
  26.         }
  27.     }
复制代码
通过实例化User类,观察实例化过程:
  1.         static void Main(string[] args)
  2.         {
  3.             User user = new User();
  4.             Console.WriteLine("获取属性"+user.Info);
  5.             user.Info = new Msg("使用属性");
  6.             Console.ReadLine();
  7.         }
复制代码
1.jpeg

通过以上案例可知实例化过程为:

  • 静态字段
  • 静态构造函数
  • 实例字段
  • 构造函数
  • 属性则是在使用时会被初始化

2.在构造函数中初始化

在声明时不再初始化,统一在构造函数中初始化
  1.     public class User
  2.     {      
  3.         public static Msg StaticField ;
  4.         private Msg privateField;
  5.         private Msg _info;

  6.         public Msg Info
  7.         {
  8.             get
  9.             {
  10.                 Console.WriteLine("进入get设置器");
  11.                 return _info;
  12.             }
  13.             set
  14.             {
  15.                 Console.WriteLine("进入set设置器");
  16.                 _info = value;
  17.             }
  18.         }

  19.         static User()
  20.         {
  21.             Console.WriteLine("静态构造函数正在执行");
  22.         }

  23.         public User()
  24.         {
  25.             Console.WriteLine("构造函数正在执行");
  26.             StaticField = new Msg("静态字段初始化");
  27.             privateField = new Msg("实例字段初始化");         
  28.         }
  29.     }
复制代码
2.jpeg

通过以上案例可知实例化过程为:

  • 在构造函数外初始化的顺序,仍旧是 静态字段=》静态构造函数=》实例字段=》构造函数
  • 在构造函数之内的初始化顺序,就是按照代码的编写顺序执行。
  • 属性则是在使用时会被初始化

三、实例化顺序(有继承情况)
  1.     public class User
  2.     {
  3.         public static Msg StaticField = new Msg("父类 静态字段初始化");
  4.         private Msg privateField = new Msg("父类 实例字段初始化");
  5.         private Msg _info;

  6.         public Msg Info
  7.         {
  8.             get
  9.             {
  10.                 Console.WriteLine("进入get设置器");
  11.                 return _info;
  12.             }
  13.             set
  14.             {
  15.                 Console.WriteLine("进入set设置器");
  16.                 _info = value;
  17.             }
  18.         }

  19.         static User()
  20.         {
  21.             Console.WriteLine("父类 静态构造函数正在执行");
  22.         }

  23.         public User()
  24.         {
  25.             Console.WriteLine("父类 构造函数正在执行");
  26.         }
  27.     }

  28.     public class VipUser : User
  29.     {
  30.         public static Msg StaticVipField = new Msg("子类 静态字段初始化");
  31.         private Msg privateVipField = new Msg("子类 实例字段初始化");
  32.         private Msg _vipInfo;

  33.         public Msg VipInfo
  34.         {
  35.             get
  36.             {
  37.                 Console.WriteLine("进入get设置器");
  38.                 return _vipInfo;
  39.             }
  40.             set
  41.             {
  42.                 Console.WriteLine("进入set设置器");
  43.                 _vipInfo = value;
  44.             }
  45.         }

  46.         public VipUser()
  47.         {
  48.             Console.WriteLine("子类 构造函数初始化完成");
  49.         }
  50.     }
复制代码
  1.         static void Main(string[] args)
  2.         {
  3.             VipUser user = new VipUser();
  4.             Console.ReadLine();
  5.         }
复制代码
3.jpeg

通过以上案例可知实例化过程为:

  • 先初始化子类的静态成员:静态字段=》静态构造函数
  • 再实例化子类的实例成员:实例字段
  • 再初始化父类的静态成员:静态字段=》静态构造函数
  • 再实例化父类的实例成员:实例字段
  • 再实例化父类的构造函数
  • 最后实例化子类的构造函数

结语

到此这篇关于C#中Class的实例化过程详解的文章就介绍到这了,更多相关C# Class实例化内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
2
精华
0
金钱
36
积分
16
注册时间
2022-12-22
最后登录
2023-8-14

发表于 2025-10-11 10:12:30 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表