C#类成员变量初始化与构造函数执行的顺序
2008-10-31 15:28
369 查看
例子:
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields() { }
}
class B : A
{
int x = 1;
int y;
public B()
{
y = -1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
}
对B实例化后x和y的值分别为: 1,0
------------------------------------
C#类成员变量初始化与构造函数执行的顺序(类成员变量初始化先执行,后执行构造函数)
子类成员变量初始化
父类成员变量初始化
父类构造函数
子类构造函数
----------------------------------------------------------
class Foo
{
public Foo(string s)
{
Console.WriteLine("Foo constructor: {0}", s);
}
public void Bar() { }
}
class Base
{
readonly Foo baseFoo = new Foo("Base initializer");
public Base()
{
Console.WriteLine("Base constructor");
}
}
class Derived : Base
{
readonly Foo derivedFoo = new Foo("Derived initializer.");
public Derived()
{
Console.WriteLine("Derived constructor");
}
}
class Program
{
static void Main(string[] args)
{
new Derived();
}
}
执行结果:
先执行类成员的初始化,顺序是从derived到base,然后是两个构造函数,顺序是从base从derived。
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields() { }
}
class B : A
{
int x = 1;
int y;
public B()
{
y = -1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}", x, y);
}
}
对B实例化后x和y的值分别为: 1,0
------------------------------------
C#类成员变量初始化与构造函数执行的顺序(类成员变量初始化先执行,后执行构造函数)
子类成员变量初始化
父类成员变量初始化
父类构造函数
子类构造函数
----------------------------------------------------------
class Foo
{
public Foo(string s)
{
Console.WriteLine("Foo constructor: {0}", s);
}
public void Bar() { }
}
class Base
{
readonly Foo baseFoo = new Foo("Base initializer");
public Base()
{
Console.WriteLine("Base constructor");
}
}
class Derived : Base
{
readonly Foo derivedFoo = new Foo("Derived initializer.");
public Derived()
{
Console.WriteLine("Derived constructor");
}
}
class Program
{
static void Main(string[] args)
{
new Derived();
}
}
执行结果:
先执行类成员的初始化,顺序是从derived到base,然后是两个构造函数,顺序是从base从derived。
相关文章推荐
- Java初始化顺序总结及其程序执行过程图- 静态变量、静态代码块、成员变量、构造函数
- 构造函数初始化、static代码块初始化、成员变量初始化、以及在子父类中混合的执行顺序实例
- (静态)初始化块、成员变量、构造函数执行顺序
- Java 代码块、成员变量初始化、构造函数初始化顺序
- Java静态变量 静态代码块 主函数 成员变量 构造代码块 构造函数的执行顺序
- Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数
- 静态变量、静态块、成员变量、构造函数在类实例化时执行顺序
- java变量,初始化快,构造函数的执行顺序
- C++成员变量的初始化顺序如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
- java变量,初始化快,构造函数的执行顺序
- [转]Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数
- static代码块、成员变量初始化、构造方法执行顺序
- AS3 类成员变量的初始化和构造函数的执行 谁先谁后?
- Java成员变量初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- C++成员变量、构造函数的初始化顺序
- 静态块,静态属性,成员变量,静态方法,构造函数执行顺序
- 成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关
- C++成员变量初始化列表执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序