成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET多態(tài)示例 抽象基類及派生類

開發(fā) 后端
本文介紹了ASP.NET多態(tài),以及.NET抽象基類和派生類。通過這些可以實現(xiàn)在web 頁上使用自定義繪制的位圖。

在本文,我們將通過一個靈活的繪圖應(yīng)用程序提供一個有關(guān)繼承、absspanact (mustinherit) 基類和接口的更為完整的示例。這不是一個控制臺應(yīng)用程序;由于其圖形化的特征,更適合作為一個 microsoft windows 窗體應(yīng)用程序。(這就給了我們一個了解 windows 窗體的機會。)

該 asp.net 版本將演示如何在 web 頁上使用自定義繪制的位圖 -- 這在大多數(shù) web 編程系統(tǒng)中是非常難以實現(xiàn)的,但使用 asp.net 則很簡單。dr. gui 相信您會喜歡這一點。而且您還可以運行該應(yīng)用程序。

經(jīng)典的ASP.NET多態(tài)示例

在教授編程時,有一些常用的、非常標準的示例程序。而我最初曾發(fā)誓不使用這些示例:我不會使用一個字符串類作為示例,也不會使用復(fù)雜的數(shù)字或繪圖應(yīng)用程序。畢竟,這樣做就不是原創(chuàng)了。

然而隨著事情的發(fā)展,使用這些示例顯得很有必要(不僅僅是因為懶惰):這些示例非常豐富,易于解釋和理解,并且可以非常清晰地揭示核心概念。

以下是該程序 windows 窗體版本的屏幕快照:

圖 1:經(jīng)典多態(tài)示例的 windows 窗體版本

 [[4805]]

以下是 asp.net 版本在瀏覽器中的顯示:

圖 2:經(jīng)典多態(tài)示例的 asp.net 版本:ASP.NET多態(tài)

  經(jīng)典多態(tài)示例的 asp.net 版本

這個程序的基本思想如下:我們有一個 absspanact 基類(在 microsoft visual basic? 中是 mustinherit),其中包含公共數(shù)據(jù)(如邊框)和一套虛擬方法,虛擬方法多數(shù)是抽象的(在 visual basic 中是 mustoverride),例如 draw。請注意,draw 的多態(tài)性很重要,因為每個可繪制對象類型(如點、線、矩形、圓等)都是用完全不同的代碼繪制的。

雖然方法可以是多態(tài)的,但數(shù)據(jù)不能。因此,我們只將確實應(yīng)用于所有可能的可繪制對象的數(shù)據(jù)放在程序中 -- 在本例中,放置了一個邊框和顏色(在其中繪制對象的線)。

與特定類型的可繪制對象相關(guān)的數(shù)據(jù)(例如圓的中心和半徑、矩形相對點的坐標,或者一條線的端點)都應(yīng)該在與該類型的可繪制對象對應(yīng)的特定類(從抽象基類中派生)中聲明。請注意,可以使用二次派生合并相似的對象。例如,可以從橢圓中派生出圓,因為所有的圓都是橢圓。與此類似,也可以從矩形中派生出方形,因為所有的方形都是矩形(也都是四邊形、多邊形)。所選擇的派生樹會反映類之間的關(guān)系,以及常用的預(yù)期使用模式,這樣您經(jīng)常執(zhí)行的操作便會非常快速、方便。

因為構(gòu)造函數(shù)(在 visual basic 中為 new)存在的主要原因是用于初始化數(shù)據(jù),因此構(gòu)造函數(shù)不是(實際上也不能是)多態(tài)的。這意味著初始創(chuàng)建操作不能是多態(tài)的,因為數(shù)據(jù)要求隨類型的不同而不同。但是,一個好的設(shè)計在對象創(chuàng)建后,可在之后的使用中將對象作為多態(tài)處理,這里我們就是這樣做的。

讓我們看看這個類集中包含什么,從根抽象基類開始:

抽象 (mustinherit) 基類

以下是 c# 中抽象基類的代碼。

c#

  1. public absspanact class dshape {   
  2. public absspanact void draw(graphics g);   
  3. protected rectangle bounding;   
  4. protected color pencolor; // 還應(yīng)具有屬性   
  5. // 還應(yīng)具有移動、調(diào)整大小等方法。   

以下是等同的 visual basic .net 代碼。

visual basic .net

  1. public mustinherit class dshape   
  2. public mustoverride sub draw(byval g as graphics)   
  3. protected bounding as rectangle   
  4. protected pencolor as color ' 還應(yīng)具有屬性   
  5. ' 還應(yīng)具有移動、調(diào)整大小等方法。   
  6. end class  

語法雖然不同,但很明顯這是相同的類。

請注意,draw 方法被暗示為 virtual (overridable),因為它被聲明為 absspanact (mustoverride)。還要注意在這個類中我們并沒有提供一個實現(xiàn)。因為我們尚不知道在這個類中執(zhí)行的對象,因此不可能寫出繪圖代碼。

包含哪些數(shù)據(jù)?

另請注意,這里并沒有很多數(shù)據(jù) -- 但我們已經(jīng)為這樣一個抽象類聲明了所有數(shù)據(jù)。

每一個可繪制對象(無論其形狀如何)都有一個邊框 -- 即可以完全包含該對象的最小可能矩形。邊框用于繪制點(作為很小的矩形)、長方形和圓 -- 并且對于其他形狀,可以作為***個用于點擊或碰撞測試的快速估計。

適用于所有對象的其他共同點并沒有很多;中心對于某些對象有用,例如圓和長方形,對于其他對象(如三角形)則沒有意義。并且通常都是使用角來表示矩形,而不是使用中心。但您不能使用角來指定圓,因為圓沒有角。dr. gui 確信您已經(jīng)看到了為一個普通可繪制對象指定其他數(shù)據(jù)的困難之處。

每個可繪制對象還有一個與繪制它的線相關(guān)聯(lián)的顏色,這里我們也做了聲明。

某些派生類

如上所述,我們不能真正創(chuàng)建一個抽象基類類型的對象,雖然我們可以將從抽象基類(或任何基類)中派生的任何對象作為基類對象處理。

所以,為創(chuàng)建一個繪圖對象,我們必須從抽象基類中派生一個新類 -- 并確保覆蓋所有 absspanact/mustoverride 方法。

在本例中我們將使用 dhollowcircle 類。dhollowrectangle 類和 dpoint 類非常相似。

以下是 c# 中的 dhollowcircle。

c#

  1. public class dhollowcircle : dshape   
  2. {   
  3. public dhollowcircle(point p, int radius, color pencolor) {   
  4. p.offset(-radius, -radius); // 需要轉(zhuǎn)換到左上角   
  5. int diameter = radius * 2;   
  6. bounding = new rectangle(p, new size(diameter, diameter));   
  7. this.pencolor = pencolor;   
  8. }   
  9.  
  10. public override void draw(graphics g) {   
  11. using (pen p = new pen(pencolor)) {   
  12. g.drawellipse(p, bounding);   
  13. }   
  14. }   
  15. }   

以下是等同的 visual basic .net 類。

visual basic .net

  1. public class dhollowcircle   
  2. inherits dshape   
  3.  
  4. public sub new(byval p as point, byval radius as integer, _   
  5. byval pencolor as color)   
  6. p.offset(-radius, -radius) ' 需要轉(zhuǎn)換到左上角   
  7. dim diameter as integer = radius * 2   
  8. bounding = new rectangle(p, new size(diameter, diameter))   
  9. me.pencolor = pencolor   
  10. end sub   
  11.  
  12. public overrides sub draw(byval g as graphics)   
  13. dim p = new pen(pencolor)   
  14. try   
  15. g.drawellipse(p, bounding)   
  16. finally   
  17. p.dispose()   
  18. end try   
  19. end sub   
  20. end class   

請注意,我們沒有為這個類聲明其他數(shù)據(jù) -- 它給出的邊框和筆已經(jīng)足夠了。(對于點和矩形是這樣,但對于三角形和其他多邊形就不夠了。)我們的應(yīng)用程序不需要在設(shè)置圓后知道圓的中心或半徑,因此將它們忽略掉。(如果需要中心和半徑,我們可以存儲這些數(shù)據(jù),或者根據(jù)邊框計算得出。)

但我們確實需要邊框,因為它是用于繪制圓的 graphics.drawellipse 方法的一個參數(shù)。因此我們根據(jù)在構(gòu)造函數(shù)中傳遞的中心點和半徑計算邊框。

ASP.NET多態(tài)、抽象基類以及派生類就介紹到這里。

【編輯推薦】

  1. 淺談ASP.NET XML Web服務(wù)
  2. ASP.NET的DataList和Repeater控件
  3. 淺析ASP.NET的IIS映射
  4. 概述ASP.NET狀態(tài)類型
  5. 淺談ASP.NET和Web服務(wù)器
責任編輯:yangsai 來源: blogbus
相關(guān)推薦

2009-08-04 17:42:23

DataSourceCASP.NET

2025-02-07 08:47:38

C#派生類接口

2009-07-22 18:08:00

ASP.NET基類

2011-06-01 10:19:41

基類對象派生類對象

2009-07-29 13:57:53

創(chuàng)建SlideShowASP.NET

2009-08-07 15:40:10

CompositeCo復(fù)合控件

2009-08-05 18:17:16

ASP.NET控件開發(fā)基類

2009-07-31 10:34:41

ASP.NET抓取網(wǎng)頁

2009-08-07 16:09:25

ASP.NET AJA

2009-07-24 12:41:21

BLL類

2009-07-29 13:12:36

StringBuildASP.NET技巧

2009-08-14 15:42:11

什么是.NET接口.NET抽象類

2009-08-07 16:45:09

ASP.NET頁面對象

2009-08-07 16:27:59

ASP.NET AJA

2021-10-17 18:54:40

Python定義使用

2009-07-22 17:45:35

ASP.NET教程

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-09-04 11:15:07

選擇C#構(gòu)造函數(shù)

2009-08-05 18:32:28

HtmlTextWriASP.NET控件開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩精品在线免费观看视频 | 久久国产精品一区 | 精产国产伦理一二三区 | 国产97视频在线观看 | 欧美日韩精品亚洲 | 一区二区三区中文字幕 | 伊人网站在线观看 | 久久精点视频 | 精品一区二区三区在线视频 | 91av在线免费看 | 在线视频一区二区三区 | 影音先锋中文字幕在线观看 | 欧美精品一区二区三区四区 在线 | 国产精品久久久久久久久久久久 | 亚洲韩国精品 | 青青草av网站 | 色必久久| 综合久久av | 一区二区手机在线 | 四虎成人av | 欧美网站一区二区 | 麻豆久久久 | 久久久久久99 | 国产你懂的在线观看 | 99re6在线视频 | 午夜精品一区二区三区三上悠亚 | 国产日韩欧美一区二区 | 中文一级片 | 精品欧美乱码久久久久久 | 日本黄色不卡视频 | 日韩中文一区 | 欧美一区二区三区电影 | 国产精品久久久久久久久久久新郎 | 国产精品成人一区二区三区夜夜夜 | 热99在线 | 在线看无码的免费网站 | 国产欧美一区二区久久性色99 | 四虎影音 | 中文字幕第一页在线 | 国产成人亚洲精品 | 日本久久一区 |