나는 지금 내가이 사용자 지정 서버 컨트롤을 복사해야하는 경우가 사용자 정의 서버 컨트롤에서 MemberwiseClone()을 호출해도 안전합니까?
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 컨트롤 계층 구조는 상당히 복잡한 모델이라는 것을 의미합니다. 그래서 저는 그러한 해결책으로 생길 수있는 단점을 아는 사람들이 있는지 듣고 싶었습니다.
흠. 내가 예상 한 것입니다. 템플릿을 사용하여 컨트롤을 이미 개발했으며 실제로 리피터 컨트롤을 래핑하는 컨트롤의 컨텍스트에서 위의 컨트롤을 사용합니다. 간단히 말해서 사용자는 내부적으로 중계기를 래핑하는 ParentControl에서 컨트롤 "MyCustomCtrl"을 정의합니다. 따라서 Repeater의 ItemTemplate을 처리 할 때 MyCustomCtrl을 복사하여 각 RepeaterItem (기본적으로 행)에 연결해야합니다. 그것이 복사 기능이 필요한 이유입니다. – Juri