为了账号安全,请及时绑定邮箱和手机立即绑定

诡异的静态构造函数

诡异的静态构造函数

胡说叔叔 2018-12-07 06:46:28
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 }字段在类中,静态构造函数会在第一次调用属性之前调用初始化静态字段,但是字段继承于基类,静态构造不会在调用属性之前初始为,而是在实例化类之后初始化,什么原因,什么解决办法?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 216 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信