举个例子吧,我是在使用DataSet和DataTable时发现的问题,所以就以此举例,其他类型没试过,不过应该是一样的





















就以上的这种结构,
声明一个myData类的实例myData111,然后使用myData111.Tables["MyDataTable"]从中取出其成员(取出来时应该是DataTable类型的实例),转换为myDataTable类型
即,

以上这样做,是一个最简单的符合面向对象法则的类型转换,但是如果将当初声明的myData111放入ViewState中,即

当页面回发服务器时,从视图状态中取出对象,进行正常的类型转换,如下


以上两句,第一个转换无疑会成功,但是第二个转换则会失败(根据面向对象的原理也应该成功),这时可以查看myData111.Tables["myDataTable"].Type()已经是DataTable型了,而本应该是myDataTable型。
这种情况在Session和其他内存结构中都没有,只是ViewState中存在,估计是因为ViewState是放在页面中的,直接影响页面的大小,所以对于复杂的对象结构没能完全保留其原貌,也许是一个bug,也许是因为各种原因而无奈的有意为之
以上是在.net1.1环境中,使用VS.net 2003开发环境,Windows server 2003 sp1,IIS6.0等运行环境进行测试的。