欢迎来到科站长!

C#教程

当前位置: 主页 > 软件编程 > C#教程

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

时间:2024-11-29 14:24:01|栏目:C#教程|点击:

前言

在平常开发的过程中,经常需要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("子类 构造函数初始化完成");
        }
    }


上一篇:C#中的XML与JSON数据处理的案例详解

栏    目:C#教程

下一篇:C#解决Excel边框样式无法复制及格式刷功能

本文标题:C#中Class的实例化过程详解

本文地址:https://www.fushidao.cc/ruanjianbiancheng/1303.html

广告投放 | 联系我们 | 版权申明

申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:257218569 | 邮箱:257218569@qq.com

Copyright © 2018-2025 科站长 版权所有冀ICP备14023439号