3D 모델링 프로그램 용 플러그인을 작성하고 있습니다. 3D 모델에서 요소의 인스턴스를 래핑하고 래핑하는 요소에서 속성을 가져 오는 사용자 지정 클래스가 있습니다. 모델의 요소가 변경되면 내 수업 (들)이 새 지오메트리를 기반으로 속성을 업데이트하기를 원합니다.상속 된 메서드의 모든 버전을 자동으로 호출하는 방법이 있습니까?
아래의 단순화 된 예에서. AbsCurveBasd, Extrusion, Shell은 모두 서로에게서 파생됩니다. 이러한 각 클래스는 클래스가 래핑중인 현재 baseShape를 기반으로 특정 속성을 업데이트하는 RefreshFromBaseShape() 메서드를 구현합니다.
RefreshFromBaseShape()의 각 구현에서 base.RefreshFromBaseShape()를 호출하여 모든 속성이 업데이트되는지 확인할 수 있습니다. 그러나 RefershFromBaseShape()의 모든 구현에서이 작업을 수행하는 것을 기억할 필요가없는 더 나은 방법이 있는지 궁금합니다. 예를 들어 AbsCurveBased에는 매개 변수없는 생성자가 없기 때문에 생성자가 기본 클래스 생성자를 호출하지 않으면 코드가 컴파일되지 않습니다.
public abstract class AbsCurveBased
{
internal Curve baseShape;
double Area{get;set;}
public AbsCurveBased(Curve baseShape)
{
this.baseShape = baseShape;
RefreshFromBaseShape();
}
public virtual void RefreshFromBaseShape()
{
//sets the Area property from the baseShape
}
}
public class Extrusion : AbsCurveBased
{
double Volume{get;set;}
double Height{get;set;}
public Extrusion(Curve baseShape):base(baseShape)
{
this.baseShape = baseShape;
RefreshFromBaseShape();
}
public override void RefreshFromBaseShape()
{
base.RefreshFromBaseShape();
//sets the Volume property based on the area and the height
}
}
public class Shell : Extrusion
{
double ShellVolume{get;set;}
double ShellThickness{get;set;}
public Shell(Curve baseShape): base(baseShape)
{
this.baseShape = baseShape;
RefreshFromBaseShape();
}
public void RefreshFromBaseShape()
{
base.RefreshFromBaseShape();
//sets this Shell Volume from the Extrusion properties and ShellThickness property
}
}
아아 나는 이벤트 나 델그 게이트를 포함해서 내가 할 수있는 일이 있다고 생각했다. 하지만 그저 base.RefreshFromBaseShape()를 사용하는 것보다 더 단순하게 만들지는 않습니다. –
단순하지는 않습니다. 파생 된 클래스가 조상이 제공 한 코드를 건너 뛸 수 없도록 보장합니다 (그래도 자손 중 하나를자를 수는 있지만). –