接口IStateManager的使用心得

时间:2022-11-03 16:42:41

在WebControls设计中,我们使用IStateManager来保存类的成员状态。

IStateManager的原理是:使用LoadViewState从StateBag中提取对象,使用SaveViewState将对象保存到StateBag中,实现IStateManage接口提供的这两个方法来一层一层的Load和Save,最终还是执行基类Control中对应的方法。

接口IStateManager的使用心得         protected   override   void  LoadViewState( object  savedState)
接口IStateManager的使用心得接口IStateManager的使用心得        
{
接口IStateManager的使用心得            
if (savedState != null)
接口IStateManager的使用心得接口IStateManager的使用心得            
{
接口IStateManager的使用心得                
object[] obj = (object[]) savedState;
接口IStateManager的使用心得                
//从数组中提取各个成员
接口IStateManager的使用心得
                this.Text = obj[0].ToString(); 
接口IStateManager的使用心得                
this.Value = obj[1].ToString();
接口IStateManager的使用心得                
this.ToolTip = obj[2].ToString();
接口IStateManager的使用心得            }

接口IStateManager的使用心得        }

接口IStateManager的使用心得
接口IStateManager的使用心得        
protected   override   object  SaveViewState()
接口IStateManager的使用心得接口IStateManager的使用心得        
{
接口IStateManager的使用心得            
object[] obj = new object[3];
接口IStateManager的使用心得            
//将成员保存到数组中
接口IStateManager的使用心得
            obj[0= this.Text;
接口IStateManager的使用心得            obj[
1= this.Value;
接口IStateManager的使用心得            obj[
2= this.ToolTip;
接口IStateManager的使用心得            
return obj;
接口IStateManager的使用心得        }

如果保存的只有两个成员,可以使用Pair类来代替object,如果是三个,可以使用Triplet来代替object。

当然如果此类中还包括集合类型的成员,可以使集合实现IStateManage,并实现这两个接口,在以上的SaveViewState中可以这样使用:obj[1] = this.items.SaveViewState(); LoadViewState中,将obj[1]转成集合类,并循环的添加items即可。