“茴”字的几种写法——C#中静态构造函数和静态变量文字执行顺序问题
2010-04-02 16:24
363 查看
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication2
{
public class A
{
public static int X;
static A()
{
X = B.Y+1;
}
}
public class B
{
public static int Y;
static B()
{
Y = A.X+1;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("X = {0},Y = {1}",A.X,B.Y);
Console.Read();
}
}
}
Main方法是程序的入口,Console.WriteLine( "X={0},Y={1}", A.X, B.Y );中先访问的是A.X,因为X是静态的成员所以在访问X之前A的静态构造函数必定已经执行完成,A的静态构造函数中又访问了B.X,同理在A的静态构造函数中获得B.Y的值之前B的静态构造函数必定已经执行完成,由于在完成A的静态构造函数中X=B.Y + 1的中途中执行流程跳到了B的静态构造函数,所以此时A.X还是默认值0,接着在B的静态构造函数被执行完成后得以在A的静态函数中成功获得B.Y,此时B.Y=A.X + 1=0+1=1,接着A.X=1+1=2
所以输出的是X=2,Y=1
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication2
{
public class A
{
public static int X;
static A()
{
X = B.Y+1;
}
}
public class B
{
public static int Y;
static B()
{
Y = A.X+1;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("X = {0},Y = {1}",A.X,B.Y);
Console.Read();
}
}
}
Main方法是程序的入口,Console.WriteLine( "X={0},Y={1}", A.X, B.Y );中先访问的是A.X,因为X是静态的成员所以在访问X之前A的静态构造函数必定已经执行完成,A的静态构造函数中又访问了B.X,同理在A的静态构造函数中获得B.Y的值之前B的静态构造函数必定已经执行完成,由于在完成A的静态构造函数中X=B.Y + 1的中途中执行流程跳到了B的静态构造函数,所以此时A.X还是默认值0,接着在B的静态构造函数被执行完成后得以在A的静态函数中成功获得B.Y,此时B.Y=A.X + 1=0+1=1,接着A.X=1+1=2
所以输出的是X=2,Y=1
相关文章推荐
- 父类和子类静态代码块、非静态代码块、构造函数(方法)执行的先后顺序问题
- Java类在new的过程中,静态域、静态块、非静态域、非静态块、构造函数的执行顺序问题
- 【java】静态代码块,非静态代码块,构造函数 的执行顺序问题
- Java 静态变量、非静态代码块、构造函数的执行顺序
- 又一波 有关 java 静态代码块 代码块 构造函数执行顺序问题
- Java se之静态代码块、代码块、构造函数执行顺序问题
- 关于静态变量,静态代码块,实例变量,实例代码块,构造函数的执行顺序的总结
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
- Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序
- Java初始化顺序总结及其程序执行过程图- 静态变量、静态代码块、成员变量、构造函数
- 类静态和实例化执行顺序优先级(静态构造函数、静态变量、静态方法)
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
- 关于静态变量,静态代码块,实例变量,实例代码块,构造函数的执行顺序
- 静态代码块,静态变量,构造函数和构造代码块的执行顺序
- Java中构造函数、构造代码块、静态代码块等的执行顺序问题
- [C#]父类与子类的静态成员变量、实例成员变量、构造函数的执行顺序
- java 静态属性 静态代码块 静态方法声明 构造块 构造函数 动态属性 执行顺序
- 构造函数、构造代码块、和静态初始化块的执行顺序
- 静态代码块、构造代码块以及构造函数执行顺序实验
- JAVA之父子类的构造函数、静态代码块等执行顺序