程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB.NET >> vb.net繼承的例子

vb.net繼承的例子

編輯:VB.NET

這次列舉一個在窗體上畫出一些圖形,如:長方形、正方形等的例子。
在vb.net中,控件可以被Windows系統重新繪制,用戶可以通過重載OnPaint事件來畫自己的圖形。PaintEventArgs是系統底層調入子例程的一個對象,用戶可以通過這個對象在窗體的表面畫一些圖形,用戶還需要建立一個Pen對象,它的顏色的缺省值是黑色,線條的寬度的缺省值是1。下面這個例子說明了這個對象的用法。
Protected Overrides Sub OnPaint(e as PaintEventArgs)
Dim g as Graphics=e.graphics
Dim rpen As new Pen(Color.Black)
g.drawLine(rpen,10,20,70,80)
End Sub
下面畫一個簡單的長方形,先寫一個長方形的類,它可以把自己畫在Windows窗體上,只有兩個方法,一個是構造函數,一個是draw方法,先聲明一個命名空間,然後再寫下長方形的類的實現代碼,如下:
Namespace VBPatterns
Public Class Rectangle
Private x,y,h,w As Integer
Protected rpen As Pen
Public Sub New(Byval x_ As Integer,_
Byval y_ As Integer,_
Byval h_ AS Integer,Byval w_ As Integer)
MyBase.New()
x=x_
y=y_
h=h_
w=w_
rpen=New Pen(Color.Black)
End Sub
End Class
End Namespace
現在每次在Main Form窗體中聲明一個變量,就把它聲明為命名空間中的一個成員。下面,首先把這個長方形的類聲明為VBPatterns命名空間的一個成員:
Public Class RectForm
Inherits System.WinForms.Form
Private rect As VBPatterns.Rectangle
並且建立一個長方形類的對象
Public Sub New()
MyBase.New()
'This call is required by the Win Form Designer.
InitializeComponent()
rect=New VBPatterns.Rectangle(40,20,30,80)
End Sub
現在重載OnPaint事件:
Protected Overrides Sub OnPaint(Byval e As PaintEventArgs)
Dim g As Graphics
g=e.Graphics
rect.draw(g)
End Sub
從長方形建立一個正方形:正方形不過是長方形的一個實例,可以從長方形的類派生出正方形的類而不需要重寫太多的代碼,下面就是實現的代碼:
Namespace VBPatterns
Public Class Square
Inherits Rectangle
Public Sub New(Byval x As Integer,_
Byval y As Integer,Byval w As Integer)
MyBase.New(x,y,w,w)
End Sub
End Class
End Namespace
正方形的類實際上只包含了一個構造函數,不過它還調用了長方形的一些方法,注意到正方形類實際上沒有draw方法,如果用戶不聲明一個新的方法,則基本類的方法就會自動被運用。
下面是通過構造函數建立了一個長方形和一個正方形
Public Sub New()
InitializeComponent
rect=New Rectangle(10,10,30,80)
sq=New Square(50,50,50)
End Sub
並重載Onpaint方法:
Protected Overrides Sub OnPaint(Byval e As PaintEventArgs)
Dim g As Graphics
g=e.Graphics
rect=draw(g)
sq.draw(g)
End Sub
在vb 6.0中,用戶可以把一個變量或者類聲明為公有或者是私有,在類中公有變量可以被其他的類訪問,而私有變量只能在類中被訪問。在vb.net中引入了關鍵字Protected,Protected能在類中和它派生出來的類訪問,也就是說Protected變量不能在類的外面被公有的訪問。
假設現在需要派生一個新的類叫做DoubleRect,它是從類Rectangle派生出來的,它的功能是畫兩個稍微錯開的長方形,而且顏色不一樣。在構造函數中,將用紅色來處理長方形的顏色,代碼如下:
Namespace VBPatterns
Public Class DoubleRect
Inherits Rectangle
Private redPen As Pen
'----
Public Sub New(Byval x As Integer,_
Byval y As Integer,_
Byval w As Integer,Byval h As Integer)
MyBase.New(x,y,w,h)
redPen=NewPen(Color.FromArGB(255,Color.Red),2)
End Sub
這意味著新類DoubleRect將具有自己的draw方法,現在基本的類已經有一個draw方法了,所以必須再建立一個具有相同名字的新方法,所以重載這種方法,代碼如下:
Public Overrides Sub draw(Byval g As Graphics)
MyBase.draw(g)
g.drawRectangle(redPen,x+4,y+4,w,h)
End Sub
注意:這裡想使用坐標系,而且長方形的大小已經在構造函數進被給定了,但有時用戶需要改變這些參數,那麼可以在DoubleRect中保留這些參數的備份,自己再聲明一些參數,或者在基本類Rectangle中把這些參數設為Protected型,如:
Protected x,y,h,w As Integer
還必須告訴編譯器,通過聲明Rectangle的draw方法為overridable,這樣就可以給draw方法重載了,代碼如下:
Public Overridable Sub draw(Byval g As Graphics)
g.DrawRectangle(rpen,x,y,w,h)
End Sub

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved