博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类静态和实例化执行顺序优先级(静态构造函数、静态变量、静态方法)
阅读量:5997 次
发布时间:2019-06-20

本文共 5073 字,大约阅读时间需要 16 分钟。

总结结果:

对于一个类执行顺序:

隐式静态变量初始化、静态函数初始化(隐式调用静态构造函数情况下,会在程序运行开头执行)>显式静态变量初始化、静态函数初始化(显式调用静态构造函数情况下,在使用类名时候就进行初始化操作)>静态构造函数执行>类实例化>变量初始化>函数初始化>构造函数初始化

总结:

对于静态调用和实例化调用,执行顺序“先静态域,后实例化域,先隐式,后显式”
对于变量、函数、构造函数执行顺序“先变量声明、再函数声明、最后构造函数”

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace StaticClassDemo{    //该类为隐式调用构造函数,会在访问StaticClassA类名之前运行,    public class StaticClassA    {        public  string staticMem = ShowStaticStr("A Static Member");             public static string ShowStaticStr(string message) {            Console.WriteLine(message);            return message;        }    }}
StaticClassA
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace StaticClassDemo{    public  class StaticClassB    {        //该类中有隐式调用静态函数        public static string staticMem = ShowStaticStr("B Static Member");                 public static string ShowStaticStr(string message)             {                 Console.WriteLine(message);                 return message;             }        }}
StaticClassB
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace StaticClassDemo{    //该类中有显式调用静态函数   public class StaticClassC    {        public static string staticMem = ShowStaticStr("C Static Member");        public static string ShowStaticStr(string message)        {            Console.WriteLine(message);            return message;        }          static StaticClassC()        { Console.WriteLine("静态构造函数C执行"); }      }}
StaticClassC
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace StaticClassDemo{    class StaticClassD    {            public   string staticMem = ShowStaticStr("D Static Member");              public static string ShowStaticStr(string message)              {                  Console.WriteLine(message);                  return message;              }                static StaticClassD()            { Console.WriteLine("静态构造函数D执行"); }      }}
StaticClassD
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace StaticClassDemo{    public class StaticClassE    {        public static string staticName = "E static Member static Name";        public string Name = ShowStaticStr("E Static Member Name");        public StaticClassE()        {            Console.WriteLine("完成初始化E");        }        public static string ShowStaticStr(string message)        {            Console.WriteLine(message);            return message;        }        public   string ShowStr(string message)        {            Console.WriteLine(message);            return message;        }      }}
StaticClassE
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace StaticClassDemo{    class Program    {        static void Main(string[] args)        {            //StaticClassA 静态字段             //C#构造函数分为静态构造函数和实例构造函数。            //静态构造函数会在类的静态变量、方法等静态属性生成之后或者在new一个新的对象之前时被调用,隐式构造函数的类的静态变量、静态函数初始化会在程序开始之前执行            //实例构造函数在new一个新的对象时执行            //执行顺序:1.执行B类静态变量初始化生成(B类为隐式静态函数,B类的静态变量先初始化生成)            Console.WriteLine("A EntryPoint");            //执行顺序:2.执行A类变量初始化生成(A该类为隐式静态函数,但A类的变量为非静态,所以在B类静态变量初始化之后,变量、函数调用之前生成),再执行A类实例化调用staticMem变量            Console.WriteLine(new StaticClassA().staticMem);            //执行顺序:3.执行A类静态方法            StaticClassA.ShowStaticStr("Call A Static Method");                       Console.WriteLine("************************************************************");            //执行顺序:4.执行B类静态字段调用显示(B类为隐式静态函数,在程序开始之前最先初始化了B类的静态变量)            Console.WriteLine(" B EntryPoint");            Console.WriteLine(StaticClassB.staticMem);            //执行顺序:5.执行B类静态方法            StaticClassB.ShowStaticStr("Call B Static Method");            Console.WriteLine("************************************************************");            Console.WriteLine("C EntryPoint");            //执行顺序:6.执行C类静态字段初始化显示(C类为显式静态函数,先初始化C类的静态变量,之后才调用C类的构造函数)            //执行顺序:7.执行C类静态字段调用显示            Console.WriteLine(StaticClassC.staticMem);            //执行顺序:8.执行C类静态函数调用            StaticClassC.ShowStaticStr("Call C Static Method");             Console.WriteLine("************************************************************");            //执行顺序:9.执行D类静态构造函数,因为D类实例化后才能调用非静态变量            Console.WriteLine("D EntryPoint");            //执行顺序:10.执行D类调用变量            Console.WriteLine(new StaticClassD().staticMem);            //执行顺序:11.执行D类静态函数调用            StaticClassD.ShowStaticStr("Call D Static Method");            Console.WriteLine("************************************************************");            Console.WriteLine("E EntryPoint");            var e =  new StaticClassE();            Console.WriteLine(e.Name);            Console.WriteLine(StaticClassE.staticName);            Console.WriteLine(e.ShowStr("Call E Method"));            Console.WriteLine(StaticClassE.ShowStaticStr("Call E Static Method"));            Console.Read();          }    }}
调用演示

 

 

 运行结果:

转载于:https://www.cnblogs.com/lasthelloworld/p/4968913.html

你可能感兴趣的文章
Spread for Windows Forms高级主题(7)---自定义打印的外观
查看>>
【循序渐进学Python】5.Python常用流程控制及其他语句
查看>>
[LeetCode] Intersection of Two Arrays II 两个数组相交之二
查看>>
winpcap 发送数据包
查看>>
在centos系统shell脚本中cat和重定向符号<<EOF结合使用的注意事项
查看>>
cisco 出现 %Error opening tftp://255.255.255.255 错误解决办法
查看>>
VIM编辑器
查看>>
IE主页被篡改 地址框变灰
查看>>
在交换机上配置Telent
查看>>
linux上架设l2tp+ipsec ***服务器
查看>>
jenkins pipeline dotnet 编译模板
查看>>
土木工程师资料管理系统EngineerCMS
查看>>
梯度下降算法以及其Python实现
查看>>
电脑技术员 Ghost Win7 Sp1 x86 纯净版 V2.1 (原大地系统)
查看>>
关于linux特殊重定向的理解
查看>>
PHPCMS使用教程
查看>>
servlet,web.xml文件配置祥解
查看>>
亚信联创笔试面试强化手册
查看>>
C语言尾插法链表
查看>>
一些常用方法
查看>>