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

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

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

[摘要]繪圖如何改變   您會注意到,Draw 方法與基類基本相同 -- 主要差別在于它調用了 Fill 方法,因為要完成繪制一個填充對象,所以需要對其進行填充。我們沒有為繪制輪廓重寫代碼,而是再次調用了基類的方法:Visual Basic .NET 中的 MyBase.Draw(g) 或 C# 中的...
繪圖如何改變
    您會注意到,Draw 方法與基類基本相同 -- 主要差別在于它調用了 Fill 方法,因為要完成繪制一個填充對象,所以需要對其進行填充。我們沒有為繪制輪廓重寫代碼,而是再次調用了基類的方法:Visual Basic .NET 中的 MyBase.Draw(g) 或 C# 中的 base.Draw(g);。
  
    因為我們正在指派用于繪制輪廓的筆,因此需要使用 using 或 Try/Finally 和 Dispose 以確保迅速釋放 Windows 筆對象。(同樣,如果非常確信所調用的方法不會引發異常,可以在完成筆的處理后,跳過異常處理,而只調用 Dispose。但我們必須調用 Dispose,無論是直接調用,還是通過 using 語句。
  
    實現 Fill 方法
    Fill 方法很簡單:指派一個畫筆,然后在屏幕上填充對象 -- 并確保 Dispose 畫筆。
  
    請注意,在 Visual Basic .NET 中,您必須明確指定實現一個接口的方法 (... Implements IFillable.Fill);而在 C# 中,實現接口中的方法或屬性由方法或屬性的簽名確定(因為您編寫了一個稱為 Fill 的方法,該方法不返回任何內容并接受一個 Graphics,因此它必須是 IFillable.Fill 的實現)。非常奇怪,Dr. GUI 通常喜歡簡潔的編程結構(如果不可能通過簡單的編寫完成),但實際上卻傾向使用 Visual Basic 的語法,因為這種語法既清晰又靈活(Visual Basic 實現類中的方法名稱不必與接口中的名稱匹配,并且一個給定方法通常能夠實現多個接口方法)。
  
    實現屬性
  
    IFillable 接口還包含一個屬性,從中可以 set 和 get 畫筆顏色。(我們在 Change fills to hot pink [將填充色更改為粉紅] 按鈕處理程序中使用該屬性。)
  
    為實現公開屬性,我們需要一個私有或保護的字段。這里我們選擇了保護字段,以便能夠方便地從派生類(而不允許任何類)對其進行訪問。
  
    具有該字段后,我們可以輕松地編寫一個很簡單的 set 和 get 方法對以實現屬性。
  
    請再次注意,在 Visual Basic .NET 中,必須明確指定所實現的屬性。
  
    接口還是抽象 (MustInherit) 基類?
  
    在面向對象的編程中,最常見的爭論之一就是,是使用抽象基類還是使用接口。
  
    接口可以提供一些額外的靈活性,但也要付出一定代價:對于實現該接口的每一個類,必須實現其中的所有內容。我們可以使用一個 helper 類來協助這項工作(稍后會提供一個相關示例),但您仍然必須在所有地方實現所有內容。并且接口不能包含數據(雖然如此,與在 Brand J 的系統中不同,它們可以包含屬性,因此它們可以看起來好象包含了數據)。
  
    在本例中,Dr. GUI 為 DShape 選擇了使用一個抽象基類而不是一個接口,因為他不想在每個類中將數據作為屬性重復實現。此外,還因為從 DShape 派生出的所有內容都是形狀,由于可填充對象仍然是形狀,因而也可以進行填充。
  
    您的選擇可能有所不同,但 Dr. GUI 認為他在此做出的選擇非常正確。
  
    繪圖對象的容器
    因為要重復繪制我們的對象(在 Windows 窗體版本中,每次都將繪制圖像;在 ASP.NET 版本中,每次都將重新加載 Web 頁),因此需要將它們放在一個容器中,以便能夠反復訪問它們。
  
    Dr. GUI 更進一步,將容器變得智能化,使其知道如何繪制所包含的對象。以下是這個容器類的 C# 代碼:
  
  
    C#
  public class DShapeList {
  ArrayList wholeList = new ArrayList();
  ArrayList filledList = new ArrayList();
  
  public void Add(DShape d) {
  wholeList.Add(d);
  if (d is IFillable)
  filledList.Add(d);
  }
  
  public void DrawList(Graphics g) {
  if (wholeList.Count == 0)
  {
  Font f = new Font("Arial", 10);
  g.DrawString("沒有任何要繪制的內容;列表為空...",
  f, Brushes.Gray, 50, 50);
  }
  else
  {
  foreach (DShape d in wholeList)
  d.Draw(g);
  }
  }
  
  public IFillable[] GetFilledList() {
  return (IFillable[])filledList.ToArray(typeof(IFillable));
  }
  }
  
  
    以下為等同類的 Visual Basic .NET 代碼:
  
  
    Visual Basic
  
  .NET Public Class DShapeList
  Dim wholeList As New ArrayList()
  Dim filledList As New ArrayList()
  Public Sub Add(ByVal d As DShape)
  wholeList.Add(d)
  If TypeOf d Is IFillable Then filledList.Add(d)
  End Sub
  
  Public Sub DrawList(ByVal g As Graphics)
  If wholeList.Count = 0 Then
  Dim f As New Font("Arial", 10)
  g.DrawString("沒有任何要繪制的內容;列表為空...", _
  f, Brushes.Gray, 50, 50)
  Else
  Dim d As DShape
  For Each d In wholeList
  d.Draw(g)
  Next
  End If
  End Sub
  
  Public Function GetFilledList() As IFillable()
  Return filledList.ToArray(GetType(IFillable))
  End Function
  End Class 



主站蜘蛛池模板: 中文日产国产精品久久 | 日韩激情成人 | 欧洲性大片xxxxx久久久 | 欧美天天 | 青草视频在线观看国产 | 午夜在线视频国产 | 色姣姣狠狠撩综合网 | 欧美怡红院免费的全部视频 | 在线观看黄日本高清视频 | 亚洲一区在线免费 | 中国国产成人精品久久 | 亚洲综合精品一二三区在线 | 日韩成人av在线 | 亚洲一区二区三区免费观看 | 中国美女牲交一级毛片 | 欧美亚洲另类一区中文字幕 | 四虎免费在线播放 | 天天爱天天插 | 日韩视频免费 | 亚洲一区二区三区免费在线观看 | 日韩欧美视频免费观看 | 人人爽天天碰天天躁夜夜躁 | 青草青青高清影院在线观看 | 亚洲人成在线播放网站 | 一级做a爰片久久毛片美女 一级做a爰片久久毛片毛片 | 日韩欧美在线综合 | 青青久久久国产线免观 | 亚洲国产综合精品中文字幕 | 中文字幕网资源站永久资源 | 四虎国产精品一区二区 | 日本高清在线不卡 | 手机看片自拍自拍 | 午夜视频在线观看网站 | 庆余年第二部在线观看免费完整版 | 色呦呦在线免费观看 | 日本成人激情 | 欧美午夜精品 | 日韩大片免费观看视频播放 | 日韩aa在线观看 | 亚洲人成在线观看男人自拍 | 四虎8848精品永久在线观看 |