HOW TO:初始化共享變量
2024-07-21 02:16:12
供稿:網(wǎng)友
 
“初始化共享變量”本不是一個(gè)how to問題。這里提出來,主要的再次認(rèn)識(shí)一下new。
在創(chuàng)建構(gòu)造函數(shù)時(shí),new是很有趣的,sub new()有別于別的函數(shù),因?yàn)樗梢猿霈F(xiàn)兩次。
public class testclass
    shared sub new()
        '...
    end sub
    sub new()
        '...
    end sub
 
    '...
end class
 
當(dāng) dim t as new testclass時(shí),它先執(zhí)行shared sub new()然后再執(zhí)行sub new()。shared sub new()只執(zhí)行一次,在實(shí)例類中,它在第一個(gè)實(shí)例產(chǎn)生時(shí)執(zhí)行。
 
運(yùn)用這個(gè)特性,shared sub new()在初始化類的共享變量時(shí)就會(huì)特別的方便。
下面作一個(gè)比較:
 
在靜態(tài)類中,
public class mycommand '使用shared sub new()
    private shared cn as sqlclient.sqlconnection
    shared sub new()
        cn = new sqlclient.sqlconnection("persist security info=false;integrated security=sspi;database=northwind;server=(local)")
    end sub
 
    public shared function command(byval commandtext as string) as sqlclient.sqlcommand
        return new sqlclient.sqlcommand(commandtext, cn)
    end function
end class
 
public class mycommand0 '不使用shared sub new()
    private shared cn as sqlclient.sqlconnection
 
    public shared function command(byval commandtext as string) as sqlclient.sqlcommand
        if cn is nothing then
            cn = new sqlclient.sqlconnection("persist security info=false;integrated security=sspi;database=northwind;server=(local)")
        end if
 
        return new sqlclient.sqlcommand(commandtext, cn)
    end function
end class
 
在實(shí)例類中,
public class mycommand1 '使用shared sub new()
 
    private shared cn as sqlclient.sqlconnection
    private _command as sqlclient.sqlcommand
 
    shared sub new()
        cn = new sqlclient.sqlconnection("persist security info=false;integrated security=sspi;database=northwind;server=(local)")
    end sub
 
    sub new()
        _command = new sqlclient.sqlcommand("select * from orders", cn)
    end sub
 
    sub new(byval commandtext as string)
        _command = new sqlclient.sqlcommand(commandtext, cn)
    end sub
 
    public readonly property command() as sqlclient.sqlcommand
        get
            return _command
        end get
    end property
 
    '以下省略......
end class
 
public class mycommand2 '不使用shared sub new()
 
    private shared cn as sqlclient.sqlconnection
    private _command as sqlclient.sqlcommand
 
    sub new()
        if cn is nothing then
            cn = new sqlclient.sqlconnection("persist security info=false;integrated security=sspi;database=northwind;server=(local)")
        end if
        _command = new sqlclient.sqlcommand("select * from orders", cn)
    end sub
 
    sub new(byval commandtext as string)
 
        if cn is nothing then
            cn = new sqlclient.sqlconnection("ersist security info=false;integrated security=sspi;database=northwind;server=(local)")
        end if
 
        _command = new sqlclient.sqlcommand(commandtext, cn)
    end sub
 
    public readonly property command() as sqlclient.sqlcommand
        get
            return _command
        end get
    end property
 
    '以下省略......
end class