你可以直接寫Public Sub New(ByVal name As String, ByVal price As Double,byval haskdisk as boolean)
創(chuàng)新互聯(lián)公司自2013年起,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目做網(wǎng)站、網(wǎng)站設計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元瑪沁做網(wǎng)站,已為上家服務,為瑪沁各地企業(yè)和個人服務,聯(lián)系電話:18982081108
,但在寫這句之前要先引用父類的構造函數(shù), 就是加上一句怕你不明白,完整的寫法就是這樣:
mybase(name , price);
Public Sub New(ByVal name As String, ByVal price As Double,byval haskdisk as boolean) ;
這樣就行了,希望我的回答可以幫助你!
1. 何謂子類化(subclassing)眾所周知,Windows是一個基于消息的系統(tǒng),消息在Windows的對象之間進行著傳遞。子類化和Windows的鉤子機制存在于消息系統(tǒng)之中,我們可以利用這些機制來操縱、修改甚至丟棄那些在操作系統(tǒng)或是進程中傳遞的消息,以求改變系統(tǒng)的一些行為。子類化技術用來截取窗口或控件之間的消息,當然是消息在到達目的窗口之前完成的操作。這些被截獲的消息既可以保留也可以修改它們的狀態(tài),之后就繼續(xù)發(fā)送到目的地。子類化技術實現(xiàn)了一些正常情況下無法實現(xiàn)的功能,試想鼠標右鍵單擊TextBox,系統(tǒng)默認彈出Undo、Cut、Copy、Paste等菜單,我們就可以利用子類化技術來改變這個系統(tǒng)菜單。簡單的說,子類化就是創(chuàng)建一個新的窗口消息處理過程,并將其插入到原先的默認窗口消息處理過程之前。子類化分為三類:實例子類化(instance subclassing)—從窗口或控件的單一實例截獲消息,這種子類化技術最普遍;全局子類化(global subclassing)—能夠截獲從相同的窗口類創(chuàng)建出來的多個窗口或控件的消息;超類化(superclassing)—和全局子類化很類似,區(qū)別在于可以應用在新的窗口類上面。 2. Visual Basic 6子類化的實現(xiàn)在Visual Basic 6子類化的實現(xiàn)中我將通過一段代碼的實例來介紹這一技術在VB6中的應用。下面的例子將演示如何將About加入窗口的系統(tǒng)菜單。①創(chuàng)建工程啟動Visual Basic 6同時創(chuàng)建一個標準EXE工程。 ②在窗體中錄入代碼Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As LongPrivate Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As String) As Long Private Const MF_BYCOMMAND = H0Private Const MF_BYPOSITION = H400Private Const MF_STRING = H0Private Const MF_SEPARATOR = H800 Private Sub Form_Load()InsertMenu GetSystemMenu(Me.hWnd, False), 0, MF_BYPOSITION Or MF_SEPARATOR, 2001, ""InsertMenu GetSystemMenu(Me.hWnd, False), 0, MF_BYPOSITION Or MF_STRING, 2002, "About Me(A)"'安裝子類化入口Call Init(Me.hWnd)End Sub Private Sub Form_Unload(Cancel As Integer)‘卸載子類化Call Terminate(Me.hWnd)End Sub ③加入一個模塊并錄入代碼Option Explicit Private Declare Function SetWindowLong Lib "user32" Alias _ "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex _ As Long, ByVal dwNewLong As Long) As Long Private Declare Function CallWindowProc Lib "user32" Alias _ "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal _ hWnd As Long, ByVal Msg As Long, ByVal wParam As _ Long, ByVal lParam As Long) As Long Const GWL_WNDPROC = (-4) Dim PrevWndProc Private Const WM_SYSCOMMAND = H112Const WM_DESTROY = H2‘子類化入口Public Sub Init(hWnd As Long) PrevWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf SubWndProc)End Sub‘子類化出口Public Sub Terminate(hWnd As Long) Call SetWindowLong(hWnd, GWL_WNDPROC, PrevWndProc)End Sub‘新的窗口消息處理過程,將被插入到默認處理過程之前Private Function SubWndProc(ByVal hWnd As Long, ByVal Msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) _ As LongIf Msg = WM_DESTROY Then Terminate (Form1.hWnd) If wParam = 2002 Then MsgBox "我是40Star", vbInformation, "hia..hia..."End If‘調用默認的窗口處理過程SubWndProc = CallWindowProc(PrevWndProc, hWnd, Msg, wParam, lParam)End Function ' -- 模塊結束 -- ' 但是,需要指出的是不正確的子類化是非常危險的,將導致一個General Protection Fault(GPF)錯誤,致使VB應用立即崩潰。 3. Visual Basic .NET子類化的實現(xiàn)在.NET中使用子類化技術要比VB6中簡單,因為微軟在.NET中已經提供了接口,不需要我們再自己SetWindowLong了,我們做的是Overrides(覆蓋) WndProc過程即可。Overrides Protected Sub WndProc( ByRef m As Message )參數(shù)m實現(xiàn)了Windows的消息類型。下面的例子將同樣演示如何將About加入窗口的系統(tǒng)菜單。①創(chuàng)建工程創(chuàng)建一個VB.NET的Windows Application工程。 ②錄入代碼Public Class Form1 Inherits System.Windows.Forms.Form ‘中間隱去了.NET自動生成的代碼‘ – 引用Win32Api – ‘Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As IntPtr, ByVal bRevert As Int32) As Int32Private Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" (ByVal hMenu As Int32, ByVal nPosition As Int32, ByVal wFlags As Int32, ByVal wIDNewItem As Int32, ByVal lpNewItem As String) As Int32 Private Const MF_BYCOMMAND = H0Private Const MF_BYPOSITION = H400Private Const MF_STRING = H0Private Const MF_SEPARATOR = H800Private Const WM_SYSCOMMAND = H112 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load InsertMenu(GetSystemMenu(Me.Handle, False), 0, MF_BYPOSITION Or MF_SEPARATOR, 2001, "") '加入一條分割線‘GetSystemMenu(Me.Handle, False)是得到系統(tǒng)菜單的句柄,第二個參數(shù)為True的話不能改變系統(tǒng)菜單,所以要設為False InsertMenu(GetSystemMenu(Me.Handle, False), 0, MF_BYPOSITION Or MF_STRING, 2002, "About Me(A)") '加入About me菜單在系統(tǒng)菜單中 End Sub‘子類化窗口--覆蓋WndProc過程 Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If m.Msg = WM_SYSCOMMAND Then If m.WParam.ToInt32 = 2002 Then MsgBox("我是40Star", vbInformation, "hia..hia...") End If End If ‘調用窗口默認的處理過程 MyBase.WndProc(m) End SubEnd Class
1.不正確
Dim abc As myClass,定義一個可以引用myClass類型對象的變量abc。這個abc變量存在于棧上。
abc=New myClass。New myClass創(chuàng)建myClass實例對象,這個對象存在于托管堆上。然后(同時)讓abc引用(指向)這個對象。
abc變量在棧上,而對象在托管堆上。
abc儲存的是對象的地址,而不是對象本身。
看下面的代碼
Dim a As myClass,b As myClass,c As myClass
a=New myClass
b=a
c=a
整個過程中只創(chuàng)建了一個myClass對象,位于托管堆上。
三個myClass類型的變量a、b、c位于棧上,都指向了這一個myClass對象
2.類的成員分 實例成員 和 靜態(tài)成員
實例成員 必須在實例對象上調用
靜態(tài)成員 可以直接調用,不需要實例對象。