需要使用模塊,那就將這個(gè)變量定義在模塊中
成都創(chuàng)新互聯(lián)公司長(zhǎng)期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鄄城企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),鄄城網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
例如在Module1中:public srPaste as Variant(不知道你要什么類(lèi)型,就定為Variant),或者使用 global 標(biāo)識(shí)符,這和public 在模塊中的的意義是一樣的。
在其他地方使用時(shí) 可以直接引用,也可以通過(guò)Module1.srPaste使用。
2、不需要使用模塊,那你就直接在通用中:public srPaste as Variant ,其他窗口使用時(shí) 通過(guò)窗口名引用 :Form1.srPaste,但是不可用global
VB.Net中模塊定義的過(guò)程的默認(rèn)訪問(wèn)級(jí)別是Public
你可以使用ILDasm反匯編一個(gè)VB.Net程序來(lái)查看
我進(jìn)行試驗(yàn)的源代碼為(Console Application):
Module Module1
Sub Main()
k()
End Sub
Sub k()
Console.WriteLine("ABC")
Console.ReadLine()
End Sub
End Module
使用ILDasm進(jìn)行反編譯后
k()過(guò)程被解釋為:
.method public static void k() cil managed
{
// 代碼大小 20 (0x14)
.maxstack 8
IL_0000: nop
IL_0001: ldstr bytearray (C8 54 C8 54 ) // .T.T
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: call string [mscorlib]System.Console::ReadLine()
IL_0011: pop
IL_0012: nop
IL_0013: ret
} // end of method Module1::k
由此得知,在VB.NET的模塊中定義的過(guò)程的默認(rèn)訪問(wèn)級(jí)別是Public,而不是Friend
我不知道VB中的模塊是啥 不過(guò)可以給你解釋一下類(lèi)和命名空間,這個(gè)都是通用的
你對(duì)類(lèi)的描述是正確的,但不僅僅是這樣, 在面向?qū)ο笾校?所有被描述的東西都被泛化為類(lèi),每一個(gè)具體的東西就是對(duì)應(yīng)類(lèi)的實(shí)例(也叫類(lèi)的對(duì)象),類(lèi)的代碼可以寫(xiě)在任何位置,他具有復(fù)用性,一般點(diǎn)虐 里都是將一個(gè)類(lèi)單獨(dú)寫(xiě)成至少1個(gè)獨(dú)立的代碼文件
命名空間簡(jiǎn)單的說(shuō)就是類(lèi)的一前綴,比如說(shuō)一個(gè)類(lèi)叫德州,中國(guó)有一個(gè)德州,美國(guó)也有一個(gè)德州,前面的這個(gè)限定國(guó)家,就相當(dāng)于命名空間,比如System.Text.StringBuilder 這個(gè)類(lèi),類(lèi)名稱是StringBuilder,命名空間是System.Text,同一個(gè)命名空間下不允許出現(xiàn)兩個(gè)名字相同的類(lèi)(有點(diǎn)類(lèi)似于文件夾和文件的關(guān)系,不同的是,類(lèi)的名稱不允許跟命名空間相同,比如你在System.Text命名空間里,不能添加一個(gè)叫做Text的類(lèi),這個(gè)點(diǎn)虐 規(guī)矩,不知道其他的是不是也這樣), 通過(guò)命名空間可以把類(lèi)按照其作用(通常是作用)、以及來(lái)源(比如Microsoft命名空間) 進(jìn)行劃分管理,使其更容被理解和找到
在C#中有 靜態(tài)類(lèi) 的概念 自然里邊全部的方法都是靜態(tài)的 這意味著你可以直接通過(guò) 類(lèi)名 方法名 去調(diào)用(例如System的Math類(lèi)就是典型) 在VB NET中 沒(méi)有 靜態(tài)類(lèi) 的概念(當(dāng)然你可以用 單例模式 把構(gòu)造函數(shù)弄成Private的方式 其它方法都是靜態(tài)的)如果某些方法需要被其它地方頻繁使用 可以創(chuàng)建 模塊 在VB NET中一旦創(chuàng)建了模塊 其中任何方法 屬性或者變量都可以被其它地方引用 因此適合全局情況下頻繁交互的情況(比如初始化加載的參數(shù) 可能后續(xù)程序要使用)等
現(xiàn)在問(wèn)題在于 如果你把一個(gè)類(lèi)似以下的模塊代碼封裝成DLL類(lèi)庫(kù) 無(wú)論在C#或者是VB NET中都無(wú)法引用到其方法
Module A
Public Sub Test()
End Sub
End Module
或許你感到很奇怪——不是在VB NET中這樣定義一個(gè)Module就直接可以使用其內(nèi)部方法了么?為什么封裝成類(lèi)庫(kù)就不可以了呢?上網(wǎng)問(wèn)了一些人 眾說(shuō)紛紜 后來(lái)我在他人協(xié)助下終于成功解決了這個(gè)問(wèn)題——解決方法很簡(jiǎn)單——只要在Module前加Public
理由是 為了兼容C# VB NET由Module封裝成類(lèi)庫(kù)中這個(gè)模塊不再是 模塊 而是一個(gè)標(biāo)準(zhǔn)的類(lèi)了 如果這樣寫(xiě) 那么在 NET中被理解成(C#)
internal A
{
public void Test()
{
}
}
整個(gè)模塊變成Internal的了!當(dāng)然你到其它程序集中去引用就引用不到!而把類(lèi)庫(kù)中的Module的修飾符改為Public就可以了 這就是MSDN那位友人給我最好的提示
雖然這個(gè)提示不是令我太滿意(因?yàn)橐繴B NET中可以直接不通過(guò) 類(lèi)名 方式直接使用方法名) 但是這給了我很大的暗示 得出重要的結(jié)論
)VB NET中Module在制作成類(lèi)庫(kù)時(shí)候等同于VB NET中的類(lèi)的規(guī)則(里邊的方法都是靜態(tài)的) 默認(rèn)情況下是Friend(C#是internal)
)根據(jù)結(jié)論 那么我們知道引用該DLL類(lèi)庫(kù)的方法一定是 i)引用命名空間? ii)C#中直接 類(lèi)名 方法名 對(duì)于VB NET 直接可以引用到方法名
lishixinzhi/Article/program/net/201311/12502