六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ASP.NET可交互式位圖窗體設計(2)

[摘要]我們的任務   這個程序的基本思想如下:我們有一個 abstract 基類(在 Microsoft Visual Basic? 中是 MustInherit),其中包含公共數據(如邊框)和一套虛擬方法,虛擬方法多數是抽象的(在 Visual Basic 中是 MustOverride),例如 Dr...
我們的任務
  這個程序的基本思想如下:我們有一個 abstract 基類(在 Microsoft Visual Basic? 中是 MustInherit),其中包含公共數據(如邊框)和一套虛擬方法,虛擬方法多數是抽象的(在 Visual Basic 中是 MustOverride),例如 Draw。請注意,Draw 的多態性很重要,因為每個可繪制對象類型(如點、線、矩形、圓等)都是用完全不同的代碼繪制的。 
  
  雖然方法可以是多態的,但數據不能。因此,我們只將確實應用于所有可能的可繪制對象的數據放在程序中 -- 在本例中,放置了一個邊框和顏色(在其中繪制對象的線)。 
  
  與特定類型的可繪制對象相關的數據(例如圓的中心和半徑、矩形相對點的坐標,或者一條線的端點)都應該在與該類型的可繪制對象對應的特定類(從抽象基類中派生)中聲明。請注意,可以使用二次派生合并相似的對象。例如,可以從橢圓中派生出圓,因為所有的圓都是橢圓。與此類似,也可以從矩形中派生出方形,因為所有的方形都是矩形(也都是四邊形、多邊形)。所選擇的派生樹會反映類之間的關系,以及常用的預期使用模式,這樣您經常執行的操作便會非常快速、方便。 
     
  因為構造函數(在 Visual Basic 中為 New)存在的主要原因是用于初始化數據,因此構造函數不是(實際上也不能是)多態的。這意味著初始創建操作不能是多態的,因為數據要求隨類型的不同而不同。但是,一個好的設計在對象創建后,可在之后的使用中將對象作為多態處理,這里我們就是這樣做的。 
  
  讓我們看看這個類集中包含什么,從根抽象基類開始: 
  
  抽象 (MustInherit) 基類
  以下是 C# 中抽象基類的代碼。單擊此處在新窗口中查看全部源文件。
  
  
  
    C#
  
  public abstract class DShape {
  public abstract void Draw(Graphics g);
  protected Rectangle bounding;
  protected Color penColor; // 還應具有屬性
  // 還應具有移動、調整大小等方法。
  }
  
    以下是等同的 Visual Basic .NET 代碼。單擊此處在新窗口中查看全部源文件。
  
    Visual Basic .NET
  
  Public MustInherit Class DShape
  Public MustOverride Sub Draw(ByVal g As Graphics)
  Protected bounding As Rectangle
  Protected penColor As Color ' 還應具有屬性
  ' 還應具有移動、調整大小等方法。
  End Class 
  
  語法雖然不同,但很明顯這是相同的類。 
  
  請注意,Draw 方法被暗示為 virtual (Overridable),因為它被聲明為 abstract (MustOverride)。還要注意在這個類中我們并沒有提供一個實現。因為我們尚不知道在這個類中執行的對象,因此不可能寫出繪圖代碼。 
  
  包含哪些數據?
  另請注意,這里并沒有很多數據 -- 但我們已經為這樣一個抽象類聲明了所有數據。 
  
  每一個可繪制對象(無論其形狀如何)都有一個邊框 -- 即可以完全包含該對象的最小可能矩形。邊框用于繪制點(作為很小的矩形)、長方形和圓 -- 并且對于其他形狀,可以作為第一個用于點擊或碰撞測試的快速估計。 
  
  適用于所有對象的其他共同點并沒有很多;中心對于某些對象有用,例如圓和長方形,對于其他對象(如三角形)則沒有意義。并且通常都是使用角來表示矩形,而不是使用中心。但您不能使用角來指定圓,因為圓沒有角。Dr. GUI 確信您已經看到了為一個普通可繪制對象指定其他數據的困難之處。 
  
  每個可繪制對象還有一個與繪制它的線相關聯的顏色,這里我們也做了聲明。 
  
  某些派生類
  如上所述,我們不能真正創建一個抽象基類類型的對象,雖然我們可以將從抽象基類(或任何基類)中派生的任何對象作為基類對象處理。 
   
   所以,為創建一個繪圖對象,我們必須從抽象基類中派生一個新類 -- 并確保覆蓋所有 abstract/MustOverride 方法。
  
    在本例中我們將使用 DHollowCircle 類。DHollowRectangle 類和 DPoint 類非常相似。
  
    以下是 C# 中的 DHollowCircle。單擊此處在新窗口中查看其他類。
  
  
    C#
  public class DHollowCircle : DShape
  {
  public DHollowCircle(Point p, int radius, Color penColor) {
  p.Offset(-radius, -radius); // 需要轉換到左上角
  int diameter = radius * 2;
  bounding = new Rectangle(p, new Size(diameter, diameter));
  this.penColor = penColor;
  }
  
  public override void Draw(Graphics g) {
  using (Pen p = new Pen(penColor)) {
  g.DrawEllipse(p, bounding);
  }
  }
  }
  
  
  以下是等同的 Visual Basic .NET 類。單擊此處在新窗口中查看其他類。
  
  
  Visual Basic .NET
  Public Class DHollowCircle
  Inherits DShape
  
  Public Sub New(ByVal p As Point, ByVal radius As Integer, _
  ByVal penColor As Color)
  p.Offset(-radius, -radius) ' 需要轉換到左上角
  Dim diameter As Integer = radius * 2
  bounding = New Rectangle(p, New Size(diameter, diameter))
  Me.penColor = penColor
  End Sub
  
  Public Overrides Sub Draw(ByVal g As Graphics)
  Dim p = New Pen(penColor)
  Try
  g.DrawEllipse(p, bounding)
  Finally
  p.Dispose()
  End Try
  End Sub
  End Class 
   
  
  請注意,我們沒有為這個類聲明其他數據 -- 它給出的邊框和筆已經足夠了。(對于點和矩形是這樣,但對于三角形和其他多邊形就不夠了。)我們的應用程序不需要在設置圓后知道圓的中心或半徑,因此將它們忽略掉。(如果需要中心和半徑,我們可以存儲這些數據,或者根據邊框計算得出。) 
  
  但我們確實需要邊框,因為它是用于繪制圓的 Graphics.DrawEllipse 方法的一個參數。因此我們根據在構造函數中傳遞的中心點和半徑計算邊框。 
  
  下面我們深入了解每一個方法。




主站蜘蛛池模板: 日韩性视频网站 | 日韩中文精品亚洲第三区 | 青草草在线视频 | 日韩美女在线 | 天天操天天射天天 | 午夜影视免费完整高清在线观看网站 | 日韩亚洲成a人片在线观看 日韩亚州 | 五月婷婷激情综合网 | 婷婷色中文网 | 欧美亚洲一区二区三区在线 | 日本成人一区二区三区 | 一级黄色片免费播放 | 婷婷久久综合 | 天天碰夜夜 | 色哟哟国产成人精品 | 日韩欧美一区二区中文字幕 | 青草国内精品视频在线观看 | 亚洲高清免费 | 日韩免费在线视频观看 | 欧美一区高清 | 日韩国产免费一区二区三区 | 自拍一区在线观看 | 在线不欧美 | 亚洲成aⅴ人片在线观 | 探花视频观看在线视频 | 日韩视频久久 | 性荡视频在线播放视频 | 色天使久久 | 亚洲成在人天堂在线 | 欧美性极品xxxxx | 一二三四在线观看免费高清观看 | 偷偷操不一样的久久 | 亚洲色图小说 | 天天综合色天天综合 | 在线一区视频 | 在线免费h视频 | 亚洲天堂资源网 | 日本最新免费二区三区 | 亚洲欧美网站 | 日韩专区视频 | 人人网碰人人网超 |