+ -
当前位置:首页 → 问答吧 → 静态构造函数木有执行,谁能帮我看看啊

静态构造函数木有执行,谁能帮我看看啊

时间:2011-12-17

来源:互联网

public baseClass{
  protected string fieldName="";
  protected static void BaseMethodName(){
  }
}

public class Class1:baseClass{
  static Class1(){
  fieldName="aaa";
  }
}

调用:
public class Class2{
  public void MethodName(){
  Class1.BaseMethodName();
  //这里调用的时候fieldName=""; debug发现Class1的构造函数木有执行,这是为什么呢?
  有其他方法实现同样的效果吗
  }
}

谢谢帮忙

作者: songzhumingxxx   发布时间: 2011-12-17

你这个代码可以执行?

连编译都不能通过,你怎么说“debug发现Class1的构造函数木有执行”来误导别人呢?

作者: sp1234   发布时间: 2011-12-17

你第一行少写一个 class 关键字也就“算了”,可是所谓的静态构造函数中调用对象实例的自身的字段,这根本不合逻辑。

能编译通过?编译器都认不得你的代码。

作者: sp1234   发布时间: 2011-12-17

把你的错误改正后
加个 Class1 c = new Class1();
后就会执行了

作者: Lxpd   发布时间: 2011-12-17

fieldname必须是静态的字段才能被静态构造函数赋值.

作者: schinar   发布时间: 2011-12-17

public class baseClass{
  protected sattic string fieldName="";
  protected static void BaseMethodName(){
  }
}

public class Class1:baseClass{
  static Class1(){
  fieldName="aaa";
  }
}

调用:
public class Class2{
  public void MethodName(){
  Class1.BaseMethodName();
  }
}
这样呢?

作者: songzhumingxxx   发布时间: 2011-12-17

引用 5 楼 songzhumingxxx 的回复:

public class baseClass{
protected sattic string fieldName="";
protected static void BaseMethodName(){
}
}

public class Class1:baseClass{
static Class1(){
fieldName="aaa";
}
}
……

你这样也是 执行不到
 static Class1(){
  fieldName="aaa";
  } 的这个方法的,
你可以这样调用
public class Class2{
  public void MethodName(){
  Class1 c = new Class1(); // 注意这里实例化一下只是为了让它执行静态构造函数
  Class1.BaseMethodName();
  }
}
你的问题其实就是 静态构造函数的执行时机问题
静态构造函数 只执行一次,它是在 它所在的类实例化时 或都第一次调用 它的静态成员 时执行

作者: Lxpd   发布时间: 2011-12-17

这是什么代码?

作者: DENQH   发布时间: 2011-12-17