每题20分,谢谢!
1.具体类是在实例化的时候分配内存等资源,那么抽象类呢?这个抽象类中有static方法,这个类的这些方法是在程序加载时加载整个抽象类吗?
2.抽象类中的静态字段,只在第一次运行实例化,关掉IE第二次运行就不实例化了?例如类库中的下代码
public abstract partial class test
{
public static SqlConnection conn = new SqlConnection();
public static string c(){
if (conn == null) c = "null ";
else
{
c = "done "
conn == null;
}
return c;
}
}
然后在页面中调用Response.Write(test.c());,第一次结果是done,关掉IE,第二次结果是null,说明conn只在第一次运行时被实例化了,而第二次没有。
------解决方案--------------------------------------------------------
第二题
public abstract partial class test
{
public static SqlConnection conn = new SqlConnection();
public static string c(){
string a;
if (conn == null)
a = "null ";
else
{
a = "done ";
//conn = null;
}
return a;
}
}
因为你使的是静态方法 所以当你工程运行时就已经加载 相当于全局变量 只有把工程停止再从新启动时才会变成第一次加载时的样子 所以你第一次运行 赋值为done后 再第二次加载时还保留第一次加载时的值是必然的 你要想一直让他为done 除非你把那行给注释掉了
------解决方案--------------------------------------------------------
第一题:
你说的“实例化的时候分配内存等资源”是对的
至于后面说的抽象类 因为抽象类并没有办法实力化 在里面的static方法 只能通过类名.方法名去调用
所以只有在当你调用的时候 这个类 以至这个类的这些方法 才会真正的被加载 才会真正的被分配内存等资源,而且是一直占用内存资源,除非停止整个工程。