c#类成员初始化顺序是什么-创新互联
创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
创新互联公司成立于2013年,公司以成都网站建设、做网站、系统开发、网络推广、文化传媒、企业宣传、平面广告设计等为主要业务,适用行业近百种。服务企业客户成百上千,涉及国内多个省份客户。拥有多年网站建设开发经验。为企业提供专业的网站建设、创意设计、宣传推广等服务。 通过专业的设计、独特的风格,为不同客户提供各种风格的特色服务。小编给大家分享一下c#类成员初始化顺序是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨方法吧!
这里直接给出C#类成员一般初始化顺序:
- 子类静态字段
- 子类静态构造
- 子类实例字段
- 父类静态字段
- 父类静态构造
- 父类实例字段
- 父类实例构造
- 子类实例构造
为什么说是“一般”初始化顺序呢?因为根据类结构的不同,类成员的初始化顺序并不是一成不变的。但是这个顺序是基础,可以推导出其他特殊的初始化顺序。下面我们就来看两种特殊的情况:
static void Main(string[] args) { Console.WriteLine("---------------一般初始化顺序---------------"); var child1 = new Child1(); Console.WriteLine("\n---------------子类静态字段初始化需要使用父类静态字段时初始化顺序---------------"); var child2 = new Child2(); Console.WriteLine("\n---------------子类静态构造函数中使用父类静态字段时初始化顺序---------------"); var child3 = new Child3(); Console.ReadKey(); } public class Child1 : Base1 { public static Display ChildStatic = new Display("Child static filed"); private Display _childFiled = new Display("Child filed"); static Child1() => Console.WriteLine("Child static ctor"); public Child1() => Console.WriteLine("Child ctor"); } public class Child2 : Base2 { ////// 子类静态字段初始化需要使用父类静态字段 /// public static Display ChildStatic = new Display("Child static filed", () => BaseStatic); private Display _childFiled = new Display("Child filed"); static Child2() => Console.WriteLine("Child static ctor"); public Child2() => Console.WriteLine("Child ctor"); } public class Child3 : Base3 { public static Display ChildStatic = new Display("Child static filed"); private Display _childFiled = new Display("Child filed"); ////// 子类静态构造函数中使用父类静态字段 /// static Child3() { Console.WriteLine("Child static ctor"); var baseStatic = BaseStatic; } public Child3() => Console.WriteLine("Child ctor"); } ////// 3个Base类相同,这里是为了演示静态成员的初始化 /// public class Base1 { public static Display BaseStatic = new Display("Base static filed"); private Display _baseFiled = new Display("Base filed"); static Base1() => Console.WriteLine("Base static ctor"); public Base1() => Console.WriteLine("Base ctor"); } public class Base2 { public static Display BaseStatic = new Display("Base static filed"); private Display _baseFiled = new Display("Base filed"); static Base2() => Console.WriteLine("Base static ctor"); public Base2() => Console.WriteLine("Base ctor"); } public class Base3 { public static Display BaseStatic = new Display("Base static filed"); private Display _baseFiled = new Display("Base filed"); static Base3() => Console.WriteLine("Base static ctor"); public Base3() => Console.WriteLine("Base ctor"); } public class Display { public Display(string msg, FuncdisplayFunc = null) { Console.WriteLine(msg); var display = displayFunc?.Invoke(); } }
本文名称:c#类成员初始化顺序是什么-创新互联
文章来源:http://pwwzsj.com/article/gcpie.html