当前位置:首页 > 网络编程 > WEB编程 > ASP.net > ASP.NET可交互式位图窗体设计(4)

ASP.NET可交互式位图窗体设计(4)

点击次数:24 次 发布日期:2008-11-26 23:20:38 作者:源代码网
源代码网推荐 绘图如何改变
源代码网推荐    您会注意到,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 
源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华