Я написал собственный серверный элемент управления, который (псевдокод) выглядит так:
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;
}
}
Я имею в виду, что иерархия элементов управления ASP.net представляет собой довольно сложную модель. Поэтому я хотел услышать, знает ли кто-нибудь из вас какие-либо недостатки, которые могут возникнуть при использовании такого решения.