您的位置:首页 > 其它

类静态和实例化执行顺序优先级(静态构造函数、静态变量、静态方法)

2015-11-16 14:59 309 查看
总结结果:

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

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

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();
}
}
}


调用演示

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: