诡异的静态构造函数

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
}
字段在类中,静态构造函数会在第一次调用属性之前调用初始化静态字段,但是字段继承于基类,静态构造不会在调用属性之前初始为,而是在实例化类之后初始化,什么原因,什么解决办法?

胡说叔叔
浏览 217回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP