堆谜语中的一个对象

在下面的代码中, ViewState["L"]存储List<string> 。 我创建一个List的新实例,并为其分配一个视图状态的值。

List<string> myList = new List<string>();

myList=(List<string>)ViewState["L"];

Response.Write(myList.Equals(ViewState["L"]));// returns True

正如你所看到的, .Equals()方法告诉我Viewstate对象和List对象是一样的。 现在我向你们提出的问题是, ListViewstate如何成为对同一个对象的引用? 该位置的堆内存实际上保存了什么?

更新下面的代码演示了任何赋予视图状态的转换值的变量都指向同一个对象。

   List<string> myList1 = new List<string>();
    myList1.Add("apple");
    ViewState["L"] = myList1;

    List<string> myList2 = new List<string>();
    myList2 = (List<string>)ViewState["L"];

    List<string> myList3 = new List<string>();
    myList3 = (List<string>)ViewState["L"];;

    myList3.Add("orange");//Here myList2 gets an orange too !

我认为,托马斯是对的。


List和Viewstate如何成为对同一个对象的引用?

它不是“ViewState”,而是ViewState的一个元素。 ViewState["L"]返回一个实际为List<string>的对象(与刚分配给myList的对象相同)


我想你在这里正在讨论ASP.NET 。 考虑到ViewState在服务器端可用,在客户端传输之前,您可以引用服务器上堆上分配的完全相同的对象。

希望这可以帮助。


ViewState实际上是一个StateBag类型的对象

StateBag只是​​其他对象的容器。 ViewState["L"]中的ViewState["L"]是ViewState中的一个索引器,它返回一些对象。 在这种情况下,该对象是一个List<string>对象

您的Equals()比较表示ViewState["L"]所持有的引用等于myList所持有的myList

希望有所帮助

链接地址: http://www.djcxy.com/p/82877.html

上一篇: An object in heap riddle

下一篇: When is the memory allocated for a static variable in java?