ASP.NET可交互式位图窗体设计5

使我们的对象可序列化
  为在 ASP.NET 中使用可绘制对象类,我们需要对其再进行一项更改。这些类需要是
可序列化的,以便能够在主要的 Web 页和生成该图像的 Web 页之间传递数据(后面将
详述)。序列化是这样的过程:将某个类的数据以某种方式写入存储介质,以便存储和/
或传递数据并在以后反序列化。反序列化是从序列化数据中重新创建对象的过程。我们
会在将来的专栏中深入讨论这个问题。

  Dr. GUI 最开始作为 Windows 窗体应用程序编写此应用程序时,只使用了 .NET
Framework 和操作系统预先分配的 Brushes 和 Pens 类中的可用常用画笔和笔。因为这
些已经分配完毕,保持对它们的引用不会有任何妨碍,同时也无需对其进行 Dispose。

  但由于笔和画笔是非常复杂的对象,不能是可序列化的,因此 Dr. GUI 必须改变其
策略,转而决定存储笔和画笔的颜色,然后在需要绘制和填充对象时动态创建笔和画笔


  如何使之可序列化?
  序列化是 .NET Framework 的一个重要部分,因此也使序列化对象的工作变得很简
单。

  我们只需使用 Serializable 属性标记一个类便可使之可序列化。(这与我们以前
用于在枚举上将其标记为一套标志的属性是同一种属性。)在 C# 和 Visual Basic
.NET 中的语法如下所示:


C#

[Serializable]
class Foo // ...
Visual Basic

.NET _
Class Foo ' ...


  注意:除了将类标记为可序列化外,还必须使类中包含的所有数据可序列化,否则
在试图序列化数据时,序列化框架会引发一个异常。

  使容器可序列化
  .NET Framework 的一大优点是可以使容器类可序列化。这意味着如果将对象存储在
可序列化的容器中,容器可以自动序列化对象。

  因此在本例中,DShapeList 类包含了两个 ArrayList 对象。由于 ArrayList 是可
序列化的,因此要使 DShapeList 可序列化,只需将其标记为 Serializable 属性即可
,如下所示:


Visual Basic

.NET _
Public Class DShapeList
Dim wholeList As New ArrayList()
Dim filledList As New ArrayList()
' ...


C#

[Serializable]
public class DShapeList {
ArrayList wholeList = new ArrayList();
ArrayList filledList = new ArrayList();


  假设我们放在 DShapeList 中的对象都是可序列化的,这时便可以使用单个语句序
列化和反序列化整个列表!

  顺便说一下,这对于该应用程序的 Windows 窗体版本也是一个很好的改变,因为它
使我们能够将绘图写入磁盘文件并重新加载。

  可绘制对象的三个版本;任何一个都可以在任何上下文中使用
  您可能已经注意到,我们有三种版本的可绘制对象代码:在 C# 和 Visual Basic
.NET 中各有一个不使用我们在上面编写的 helper 方法的版本,另一个是 Visual
Basic .NET 中使用 helper 方法的版本。

  在这里还有一点微小的差别:使用 helper 的文件中的数据类被标记为可序列化;
其他文件中的数据类则没有标记为可序列化。

  但是,请注意下面很重要的一点:如果我们返回去并将所有文件中的数据类标记为
可序列化,那么将能够在任何应用程序中使用任何类。我们将能够混合使用 C# 和
Visual Basic .NET。并且能够在 ASP.NET 应用程序中使用最初为 Windows 窗体应用程
序编写的代码。

  这种简便的代码重用意味着您编写的代码更具价值,因为代码可以在很多不同的环
境中重复使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值