精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網(wǎng)站建設(shè)資訊

NEWS

網(wǎng)站建設(shè)資訊

vb.netof用法 vbnet using

用最簡(jiǎn)單的代碼介紹一下指針在VB.net里面的用法?

例1:以下程序我們申請(qǐng)幾個(gè)指向不同類型的指針:

10年積累的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有西夏免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

’使用StructLayout(LayoutKind.Sequential)屬性告訴net編譯器:結(jié)構(gòu)的元素在內(nèi)存中按其出現(xiàn)的順序排列

StructLayout(LayoutKind.Sequential) _

Public Structure DEFUDT_Test

Public bytb As Byte

Public i32a As Int32

End Structure

Public Function fnGetIntptr1() As IntPtr

’取得一個(gè)4字節(jié)數(shù)組指針

Dim tabytTest(3) As Byte

’以下語(yǔ)句告訴net垃圾回收進(jìn)程不對(duì)tabytTest進(jìn)行處理,也就是說(shuō)tabytTest占用的內(nèi)存區(qū)域固定不變。

Dim thObject As GCHandle = GCHandle.Alloc(tabytTest, GCHandleType.Pinned)

Dim tpObject As IntPtr = thObject.AddrOfPinnedObject() ’取得指向字節(jié)數(shù)組的指針

’取得一個(gè)指向32位內(nèi)存數(shù)據(jù)的指針,

’由于使用gchandle取指針的方法只能對(duì)引用的對(duì)象有效,

’所以對(duì)如int32等值類型必須使用將其封裝成為一個(gè)對(duì)象的方法以變?yōu)橐妙愋?/p>

Dim ti32Test As Object = Convert.ToInt32(0)

’以下語(yǔ)句告訴net垃圾回收進(jìn)程不對(duì)ti32test進(jìn)行處理,也就是說(shuō)ti32Test的內(nèi)存位置固定不變。

Dim thObject1 As GCHandle = GCHandle.Alloc(ti32Test, GCHandleType.Pinned)

Dim tpObject1 As IntPtr = thObject1.AddrOfPinnedObject() ’取得ti32Test的首地址

Dim tudtTest1 As DEFUDT_Test

’由于結(jié)構(gòu)是一種值類型變量,為保證指針申請(qǐng)方便,我們申請(qǐng)

’取得一個(gè)和結(jié)構(gòu)tudtTest1大小一致的字節(jié)數(shù)組指針,只要空間占用長(zhǎng)度和結(jié)構(gòu)一樣就可以了

’由于net在結(jié)構(gòu)封裝中會(huì)插入額外的數(shù)據(jù)位,所以一定要用sizeof方法得到結(jié)構(gòu)在非托管使用時(shí)的實(shí)際大小

Dim tudtTest(Marshal.SizeOf(tudtTest1)) As Byte

Dim thObject2 As GCHandle = GCHandle.Alloc(tudtTest, GCHandleType.Pinned)

Dim tpObject2 As IntPtr = thObject2.AddrOfPinnedObject() ’取得指向結(jié)構(gòu)的指針

’在這兒你可以寫(xiě)對(duì)指針處理的任意代碼(在例2中會(huì)給予補(bǔ)充)……

’在使用完畢后一定要釋放指針指向的內(nèi)存塊,讓垃圾回收器可對(duì)這個(gè)內(nèi)存塊回收處理

If thObject.IsAllocated Then

thObject.Free()

End If

If thObject1.IsAllocated Then

thObject1.Free()

End If

If thObject2.IsAllocated Then

thObject2.Free()

End If

End Function

上例中指針流程處理可以歸納為:

1、 定義一個(gè)具有合適內(nèi)存長(zhǎng)度的引用變量(關(guān)于引用變量和值變量的差異可以參觀VB.NET的書(shū)籍)

2、使用GCHandle.Alloc方法將變量的內(nèi)存區(qū)域固定下來(lái)。

3、使用GCHandle對(duì)象的AddrOfPinnedObject取得該內(nèi)存區(qū)域的首地址并賦值給指針變量.

4、對(duì)指針進(jìn)行操作

5、使用GCHandle對(duì)象的free方法釋放指針指向的內(nèi)存區(qū)域以便net垃圾回收器可以回收這個(gè)內(nèi)存空間

2、指針?biāo)赶驍?shù)據(jù)的存取

在.net中,對(duì)指針指向數(shù)據(jù)的存儲(chǔ)函數(shù)都封裝在marshal類中,主要的函數(shù)包括:Copy、PtrToStringUni 、PtrToStructure 、OffsetOf、WriteXXX,RreadXXX等,其中WriteXXX的表示向指針?biāo)硎镜牡刂分袑?xiě)入XXX類型的數(shù)據(jù),而ReadXXX中作用就是將指針?biāo)诘刂返臄?shù)據(jù)以XXX類型方式讀出。看例程2,我們使用這些方法演示對(duì)例1那幾個(gè)指向不同類型數(shù)據(jù)的指針作數(shù)據(jù)存/取操作。

例2:演示向例1申請(qǐng)得到的幾個(gè)指針執(zhí)行寫(xiě)入及讀取數(shù)據(jù)的操作.

Marshal.WriteInt32(tpObject1, 0, Convert.ToInt32(77)) ’向ti32Test變量指向的地址寫(xiě)入32位整數(shù)77

MsgBox("現(xiàn)在ti32Test的值為:" ti32Test) ’因?yàn)樽兞看鎯?chǔ)地址的數(shù)據(jù)已改為77,所以顯示為77

’以下這句之所以可行,因?yàn)閠i32Test是32位整數(shù),而tpObject指向的tabytTest數(shù)組剛好有4個(gè)元素

’而每一個(gè)byte元素都占用8位,合起來(lái)就是32位,和ti32Test占用的空間一樣。這就印證了前面提’

’到的net中指針沒(méi)有指向類型的說(shuō)明。

Marshal.WriteInt32(tpObject, 0, ti32Test)

’以下代碼再將tabytTest字節(jié)數(shù)組的內(nèi)容理解為一個(gè)int32整數(shù),

’并將值賦值給tudtTest結(jié)構(gòu)中的int32元素

’我們使用Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32以取得i32a元素在結(jié)構(gòu)中的內(nèi)存偏移位置

’所以New IntPtr(tpObject2.ToInt32 + Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32)就臨時(shí)產(chǎn)生了

’一個(gè)指針并指向i32a所在的內(nèi)存地址(, 這個(gè)方法也說(shuō)明了指針可以以字節(jié)為單位進(jìn)行加減計(jì)算以指向合適的變量。

’Marshal.ReadInt32的作用是從指針中讀取一個(gè)32整數(shù)。

Marshal.WriteInt32(New IntPtr(tpObject2.ToInt32 + Marshal.OffsetOf(GetType(DEFUDT_Test), "i32a").ToInt32), _

0, Marshal.ReadInt32(tpObject))

’這兒可以將字節(jié)數(shù)組的內(nèi)容復(fù)制到真正的結(jié)構(gòu)中

MsgBox(Marshal.OffsetOf(tudtTest1.GetType, "i32a").ToInt32)

tudtTest1 = CType(Marshal.PtrToStructure(tpObject2, GetType(DEFUDT_Test)), DEFUDT_Test)

MsgBox("結(jié)構(gòu)tidtTest1中i32a元素的值為:" tudtTest1.i32a) ’此處將顯示剛賦的值77

關(guān)于VB.NET 的AddressOf 問(wèn)題

你好,EnableDisconnectNotification、 EnableWriteNotification 這兩個(gè)是外部函數(shù)吧,是委托嗎?

建議使用委托可以看看下面的例子

此示例演示如何使用委托將過(guò)程傳遞給另一個(gè)過(guò)程。

委托是一種類型,與任何其他類型一樣可在 Visual Basic 中使用。AddressOf 運(yùn)算符如果應(yīng)用到一個(gè)過(guò)程名,則返回一個(gè)委托對(duì)象。

此示例有一個(gè)具有委托參數(shù)的過(guò)程,該委托參數(shù)可接受對(duì)另一個(gè)過(guò)程的引用,而引用則是通過(guò) AddressOf 運(yùn)算符獲得的。

創(chuàng)建委托和匹配過(guò)程

創(chuàng)建一個(gè)名為 MathOperator 的委托。

Visual Basic

復(fù)制代碼

Delegate Function MathOperator( _

ByVal x As Double, _

ByVal y As Double _

) As Double

創(chuàng)建一個(gè)名為 AddNumbers 的過(guò)程,其參數(shù)和返回值與 MathOperator 的參數(shù)和返回值匹配,以使簽名匹配。

Visual Basic

復(fù)制代碼

Function AddNumbers( _

ByVal x As Double, _

ByVal y As Double _

) As Double

Return x + y

End Function

創(chuàng)建名為 SubtractNumbers 的過(guò)程,其簽名與 MathOperator 匹配。

Visual Basic

復(fù)制代碼

Function SubtractNumbers( _

ByVal x As Double, _

ByVal y As Double _

) As Double

Return x - y

End Function

創(chuàng)建一個(gè)名為 DelegateTest 的過(guò)程,它接受一個(gè)委托作為參數(shù)。

此過(guò)程可接受對(duì) AddNumbers 或 SubtactNumbers 的引用,這是因?yàn)樗鼈兊暮灻c MathOperator 簽名匹配。

Visual Basic

復(fù)制代碼

Sub DelegateTest( _

ByVal x As Double, _

ByVal op As MathOperator, _

ByVal y As Double _

)

Dim ret As Double

ret = op.Invoke(x, y) ' Call the method.

MsgBox(ret)

End Sub

創(chuàng)建一個(gè)名為 Test 的過(guò)程,它使用 AddNumbers 的委托作為參數(shù)調(diào)用 DelegateTest 一次,然后使用 SubtractNumbers 的委托作為參數(shù)再次調(diào)用。

Visual Basic

復(fù)制代碼

Protected Sub Test()

DelegateTest(5, AddressOf AddNumbers, 3)

DelegateTest(9, AddressOf SubtractNumbers, 3)

End Sub

調(diào)用 Test 時(shí),它首先顯示 AddNumbers 對(duì) 5 和 3 的操作結(jié)果,也就是 8。然后顯示 SubtractNumbers 對(duì) 9 和 3 的操作結(jié)果,也就是 6。

創(chuàng)建一個(gè)名為 MySubDelegate 的委托。

Delegate Sub MySubDelegate(ByVal x As Integer)

聲明一個(gè)類,該類包含與該委托具有相同簽名的方法。

Class class1 Sub Sub1(ByVal x As Integer) MsgBox("The value of x is: " CStr(x)) End Sub End Class

定義一個(gè)方法,該方法創(chuàng)建該委托的實(shí)例并通過(guò)調(diào)用內(nèi)置的 Invoke 方法調(diào)用與該委托關(guān)聯(lián)的方法。

Protected Sub DelegateTest() Dim c1 As New class1 ' Create an instance of the delegate. Dim msd As MySubDelegate = AddressOf c1.Sub1 ' Call the method. msd.Invoke(10) End Sub

VB.net 如何使用

1. 什么是類和對(duì)象?

答:類包含某一類對(duì)象的數(shù)據(jù)和過(guò)程。對(duì)象是類的實(shí)例。

2. 為什么采用類和對(duì)象進(jìn)行程序設(shè)計(jì)?

答:以便按照對(duì)象定義類,提高程序代碼的可重用性,避免重復(fù)勞動(dòng)。

3. 在同一個(gè)類中,應(yīng)當(dāng)包括哪些對(duì)象的屬性和方法?

答:同一類對(duì)象的數(shù)據(jù)和過(guò)程。

4. VB程序設(shè)計(jì)主要包括哪兩個(gè)方面的內(nèi)容?

答:Windows應(yīng)用程序界面和代碼。

5. 什么是事件驅(qū)動(dòng)?

答:根據(jù)事件轉(zhuǎn)去執(zhí)行相應(yīng)的事件處理過(guò)程。

1. 控件是窗體上的 對(duì)象 。

2. Visual Basic具有 BASIC程序語(yǔ)言簡(jiǎn)單易學(xué)的 優(yōu)點(diǎn),新增了 可視化和面向面向?qū)ο蟪绦蛟O(shè)計(jì)的 熱點(diǎn),是 Windows編程人員廣泛使用的編程 工具。

3. 對(duì)象的 屬性 是在其類中定義的數(shù)據(jù)。

4. 對(duì)象的 方法 是在其類中定義的過(guò)程。

5. 對(duì)象本身的動(dòng)作或功能稱為 方法 ,外界施加于某對(duì)象的動(dòng)作或操作稱為 事件 。

1.面向過(guò)程

是指從功能的角度分析問(wèn)題,將待解決的問(wèn)題空間分解成若干個(gè)功能模塊,每個(gè)功能模塊描述一個(gè)操作的具體過(guò)程。

2.面向過(guò)程程序設(shè)計(jì)

主要是根據(jù)事務(wù)本身的邏輯過(guò)程進(jìn)行編程的一種方法。

3.面向?qū)ο蟪绦蛟O(shè)計(jì)

是一種計(jì)算機(jī)編程架構(gòu),是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。即按照對(duì)象編寫(xiě)程序。

4.事件驅(qū)動(dòng)程序設(shè)計(jì)

是一種電腦程式設(shè)計(jì)模型。這種模型的程式執(zhí)行流程是由使用者的動(dòng)作或者是由其他程式的訊息來(lái)決定的。

5.函數(shù)

是一種特定的運(yùn)算,在程序中使用一個(gè)函數(shù)時(shí),只要給出函數(shù)名并給出一個(gè)或多個(gè)參數(shù),就能得到它的函數(shù)值

6.過(guò)程

是程序中可以執(zhí)行的一段代碼,過(guò)程包含在一個(gè)聲明語(yǔ)句和一個(gè)結(jié)束語(yǔ)句之間

7.類

是所有具有共同特征的事物的抽象,是一個(gè)抽象的概念(類是一組具有相同屬性特征的對(duì)象的抽象描述,是面向?qū)ο蟪绦蛟O(shè)計(jì)的又一個(gè)核心概念或者類是對(duì)一組對(duì)象共同具有的屬性和行為的抽象,具有封裝和隱藏性、還具有繼承性)。

8.對(duì)象

是一個(gè)屬性集合及其操作的封裝體(對(duì)象是用來(lái)描述現(xiàn)實(shí)世界中客體的部件,是面向?qū)ο筌浖到y(tǒng)在運(yùn)行時(shí)刻的基本單位)。

類是對(duì)象的抽象,對(duì)象是類的實(shí)例。

9.事件

窗體或控件識(shí)別的動(dòng)作

10.事件驅(qū)動(dòng)

根據(jù)事件轉(zhuǎn)去執(zhí)行相應(yīng)的事件處理過(guò)程。

11.屬性

是一個(gè)對(duì)象的特性,不同的對(duì)象有不同的屬性

12.算法

指解決某個(gè)問(wèn)題的嚴(yán)格方法,描述有始有終的計(jì)算過(guò)程。

5.屬性窗口中屬性值被設(shè)置的方式有哪幾種?

6種:輸入 選取 瀏覽 賦值 默認(rèn) 拖動(dòng)

1.程序代碼是由一行一行的 語(yǔ)句 所組成。

3.在程序代碼中可將一個(gè)語(yǔ)句分成兩段的特殊符號(hào)為( _ )。

5.數(shù)值變量如果沒(méi)有設(shè)置初值,則內(nèi)定值為 0 。

7.如果有一個(gè)變量,可能會(huì)存放數(shù)值數(shù)據(jù)或字符串?dāng)?shù)據(jù),此時(shí)可以聲明該變量為 對(duì)象變量。

9. Integer數(shù)據(jù)類型占 4 bytes的內(nèi)存空間,可以表示的數(shù)值范圍為 -2,147,483,648~2,147,483,647 的整數(shù)

3.VB.NET程序語(yǔ)言數(shù)據(jù)類型的種類有哪些?

(1)數(shù)值型

①整形數(shù):短整形(Short)、整形(Integer)、長(zhǎng)整型(Long)

②字節(jié)型(Byte)

③實(shí)型數(shù):?jiǎn)尉刃停⊿ingle)、雙精度型(Double)

④貨幣型(Decimal)

(2)字符型(Char)和字符串型(String)

(3)邏輯型/布爾型(Boolean)

(4)日期型(Date)

(5)對(duì)象型(Object)[即可變型(Variant)]

1.局部變量、全局變量、跨模塊變量分別在何處聲明?其生存期分別是多少?

局部變量在程序內(nèi)聲明。生存期為從所在的程序運(yùn)行開(kāi)始到程序結(jié)束。

全局變量在窗體內(nèi)所有程序的外邊聲明。生存期為由該變量聲明開(kāi)始,一直到程序退出運(yùn)行為止。

跨模塊變量在一般模塊的聲明區(qū)用Public來(lái)聲明。生存期為從一個(gè)Windows應(yīng)用程序項(xiàng)目文件開(kāi)始運(yùn)行到結(jié)束。

3.什么是靜態(tài)變量?

靜態(tài)變量是在離開(kāi)程序時(shí)能夠繼續(xù)保留目前的值,待下回進(jìn)入該程序時(shí)能夠繼續(xù)保留的變量值的局部變量,用Static關(guān)鍵字聲明。

(一)問(wèn)答題

1.請(qǐng)簡(jiǎn)單說(shuō)明在程序中使用程序的好處。

(1)程序可以重復(fù)使用,以方便維護(hù)與程序調(diào)試。

(2)程序可以讓其他工程或項(xiàng)目使用。

(3)程序的邏輯簡(jiǎn)單、明確,可以讓程序變得簡(jiǎn)單且可讀性高。

(4)程序具有模塊化的功能,因此可以將一個(gè)大的應(yīng)用程序分成數(shù)個(gè)小的且不同功能的程序,讓不同的程序設(shè)計(jì)師分別編寫(xiě)?yīng)毩⒉煌δ艿某绦颍⒁詧F(tuán)隊(duì)開(kāi)發(fā),加快應(yīng)用程序開(kāi)發(fā)的時(shí)間。

3.試比較傳值調(diào)用與傳址調(diào)用的差異。

(1)聲明方式不同:

傳值——在程序中的虛自變量之前加上ByVal

傳址——在程序中的虛自變量之前加上ByRef

(2)占用內(nèi)存不同

傳值——調(diào)用程序的實(shí)自變量與被調(diào)用程序的虛自變量占用不同內(nèi)存

傳址——調(diào)用程序的實(shí)自變量與被調(diào)用程序的虛自變量占用同一地址的內(nèi)存,也就是說(shuō),在做參數(shù)傳遞時(shí),調(diào)用程序中的實(shí)自變量是將自己本身的內(nèi)存地址傳給被調(diào)用程序的虛自變量

(3)虛自變量更改結(jié)果不同

傳值——使用傳值調(diào)用可以防止變量被程序修改

傳址——被調(diào)用程序可以通過(guò)虛自變量將值傳回給調(diào)用程序

5.什么是程序多載?

程序多載是使用不同的自變量串行或數(shù)據(jù)類型來(lái)加以區(qū)分相同名稱的程序。

VB.NET 中的Of是什么意思

泛型參數(shù),表示一種特定類型,通常用于集合List, Dictionary之類的。

原型:Dictionary(Of TKey, TValue)

原型不能直接使用,必須給TKey, TValue指定一個(gè)類型(Type)

強(qiáng)類型字典:Dictionary(Of String, String)

表示鍵和值都為String類型的字典。

vb.net 線程 如何動(dòng)態(tài) address of 過(guò)程,即 "過(guò)程" 是可以用戶動(dòng)態(tài)傳送的。

過(guò)程名是不可能作為參數(shù)使用的,想必你需要調(diào)用的過(guò)程是有限的,那么可以用一個(gè)變量來(lái)確定:

sub 過(guò)程名(p as integer)

Dim i As Threading.Thread

select case p

case 1

i = New Threading.Thread(AddressOf 過(guò)程1)

case 2

i = New Threading.Thread(AddressOf 過(guò)程2)

.........................

..........................

end select

i.start()

end sub

VB.NET 泛函數(shù) system.collections.generic.list(of textbox) 的使用問(wèn)題!

Public Function GetTextboxFromFrm(ByVal frm As Control) As List(Of TextBox)

Dim obj As Control

Dim listTB As New List(Of TextBox)

For Each obj In frm.Controls

If TypeOf obj Is TextBox Then

Debug.WriteLine(obj.Name " " obj.Text)

listTB.Add(obj)

Else

If obj.HasChildren Then

listTB.AddRange(GetTextboxFromFrm(obj))

End If

End If

Next

Return listTB

End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '我放到按鈕事件里了,你自己改成函數(shù)

Dim AllTextBox As List(Of TextBox)

Dim cc() As String '這個(gè)數(shù)組保存所有文本框的Text

Dim i As Integer = 0

AllTextBox = GetTextboxFromFrm(Me)

For Each tb As TextBox In AllTextBox

ReDim Preserve cc(i)

cc(i) = tb.Text

i += 1

Next

End Sub


當(dāng)前文章:vb.netof用法 vbnet using
文章源于:http://m.jcarcd.cn/article/hgjpdg.html
主站蜘蛛池模板: 91精品国产秘原神 | 日韩福利 | 日本网色 | 亚洲无码1区 | 欧美日韩中文字幕 | 91九色在线精品 | 国产一区在线激情 | 欧洲女人性开放视频 | 国产xxxxx| 欧美性XXXX | 国产绿奴在线 | 国内偷视频在线观看 | 国产欧美丝袜在 | 国产精品私密保养 | 国产精品看片在线 | 日本熟女多毛性爱 | 日本综合欧美 | 91精品免费观看 | 九九社区精品 | 成人无号精品 | 日本aⅴ在线观看 | 国产精品簧片mv | 日本秋霞免费 | 国产欧美二区三 | 精品一区二区五 | 日韩经典三级 | 区三区影院动漫 | 91抖音视频成人 | 日韩在线观看 | 91精品欧美| 韩国大片 | 三级经典国产精品 | 精品国精品国产自 | 国产区精品区 | 国产偷国 | 国产理论片在线播放 | 国产精品有码 | 福利国产| 欧美日韩一级无毛 | 乱伦一区后宫露营 | 欧美日韩免费观看 |