代码之家  ›  专栏  ›  技术社区  ›  Juri

在自定义服务器控件上调用MemberwiseClone()安全吗?

  •  0
  • Juri  · 技术社区  · 16 年前

    我编写了一个自定义服务器控件(伪代码),如下所示

    public class MyCustomCtrl : WebControl
    {
       private Button innerCtrl; //some arbitrary object, doesn't matter
    
       ...
    
       protected override void CreateChildControls()
       {
          //initialization etc, as standard...
    
       }
    
    }
    

    现在,我必须复制这个自定义服务器控件。基本上,它是由程序员在aspx或ascx代码上声明性地添加的。在运行时,必须创建此控件的多个实例,然后将其添加到某个父控件中。然而,这是在父控件的上下文中处理的。

    不管怎样,解释使用背景有点困难。然而,我的主要问题是使用“克隆”是否安全,尤其是调用 MemberwiseClone() 关于网络控制?到目前为止,我所做的是添加一个类似的方法

    public class MyCustomCtrl : WebControl
    {
       ...
    
       public object Clone(){
          MyCustomCtrl clone = MemberwiseClone() as MyCustomCtrl;
          clone.InnerCtrl = this.innerCtrl.Clone() as Button; //or whatever type
    
          return clone;
       }
    }
    

    1 回复  |  直到 16 年前
        1
  •  2
  •   Ruben    16 年前

    不,出于一个非常普遍的原因,这不是一个安全的操作:MemberwiseClone是一个浅拷贝,而不是深度拷贝。

    ITemplate ),具有创建新控制层次结构的InstantiateIn方法。我建议你看看像Repeater这样的控件。

    推荐文章