日期:2014-05-18  浏览次数:20591 次

抽象类问题
每题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方法 只能通过类名.方法名去调用
所以只有在当你调用的时候 这个类 以至这个类的这些方法 才会真正的被加载 才会真正的被分配内存等资源,而且是一直占用内存资源,除非停止整个工程。