• 闪存
• 博客
• 发言 小组
• 投递 新闻
• 提问 博问
• 添加 收藏
• 文库

# 诡异的静态构造函数

0 悬赏园豆：5 [已解决问题] 解决于 2011-01-08 10:48 public class Rational

{

protected static Rational one;
public static Rational One
{
get { return one; }
}
protected static Rational zero;
public static Rational Zero
{
get { return zero; }
}

{

public int N { get; set; }
public int M { get; set; }
static Rational()
{
one = new Rational(1, 1);
zero = new Rational(0, 1);
}
public Rational(int n, int m)
{
N = n;
M = m;
}
public override string ToString()
{
return string.Format("{0}/{1}", N, M);
}
}

static void Main(string[] args)
{
Rational r1 = Rational.One;//r1 is 1/1
Rational r2 = Rational.Zero;//r2 is 0/1
Rational r = new Rational(1, 2);
Rational r3 = Rational.One;//r3 is 1/1
Rational r4 = Rational.Zero;//r4 is 0/1
}
但是:

public class Ra
{
protected static Rational one;
public static Rational One
{
get { return one; }
}
protected static Rational zero;
public static Rational Zero
{
get { return zero; }
}
}

public class Rational:Ra
{

public int N { get; set; }
public int M { get; set; }
static Rational()
{
one = new Rational(1, 1);
zero = new Rational(0, 1);
}
public Rational(int n, int m)
{
N = n;
M = m;
}
public override string ToString()
{
return string.Format("{0}/{1}", N, M);
}
}

static void Main(string[] args)
{
Rational r1 = Rational.One;//r1 is null
Rational r2 = Rational.Zero;//r2 is null
Rational r = new Rational(1, 2);
Rational r3 = Rational.One;//r3 is 1/1
Rational r4 = Rational.Zero;//r4 is 0/1
}

0

Rational r1 = Ra.One;//r1 is null，One属于Ra类的成员，JIT根本不需要加载Rational的任何代码，因此Rational中的Static根本不会执行。

您需要登录以后才能回答，未注册用户请先注册