2

생성자 수수께끼, 나는이 두 생성자를가집니다. 하나는 클래스의 사본을 만들기위한 것이고 다른 하나는 표준 생성자입니다. 처음 규칙을 호출해야 규칙을 사용할 수 있습니다. 나는 코드를 반복 할 필요가 없기 때문에 두 가지 차원을 덮어 쓰지 않는 방법을 찾고있다.복사 기본 생성자로 복사 된 값을 덮어 쓰는 생성자

public SprinklerLineModel() 
    { 

     NearCrossMainDimension = new PipeDimensionModel(); 
     FarCrossMainDimension = new PipeDimensionModel(); 

     this.AddValidationRule(Rule.CreateRule(() => BranchLineDiameter, RuleMessage.GREATER_THAN_ZERO,() => BranchLineDiameter > 0)); 
    } 

    /// <summary> 
    /// Copy Constructor 
    /// </summary> 
    /// <param name="sprinklerLineModel">Original copy of sprinklerLineModel</param> 
    public SprinklerLineModel(SprinklerLineModel sprinklerLineModel) 
     :this() 
    { 
     this.EstimatedFlow = sprinklerLineModel.EstimatedFlow; 
     this.EstimatedPressure = sprinklerLineModel.EstimatedPressure; 
     this.NearCrossMainDimension = new PipeDimensionModel(sprinklerLineModel.NearCrossMainDimension); 
     this.FarCrossMainDimension = new PipeDimensionModel(sprinklerLineModel.FarCrossMainDimension); 
     this.BranchLineDiameter = sprinklerLineModel.BranchLineDiameter; 
     this.LeadLinePipeFittingLength = sprinklerLineModel.LeadLinePipeFittingLength; 
     this.ExbPipeFittingLength = sprinklerLineModel.ExbPipeFittingLength; 

     this.IsDirty = sprinklerLineModel.IsDirty; 
    } 

두 변수를 덮어 쓰지 않고 기본 생성자를 호출 할 수 있기를 원합니다. 어떤 도움을 주시면 감사하겠습니다.

나는 그들이 null인지 확인하고 그것이 최선의 방법 인 것 같지 않다고 생각한다.

감사합니다.

답변

0

저는 초기화 메소드를 추출하여 두 생성자에서이 메소드를 호출합니다.

public SprinklerLineModel() 
{ 
    NearCrossMainDimension = new PipeDimensionModel(); 
    FarCrossMainDimension = new PipeDimensionModel(); 
    Init(); 
} 

public SprinklerLineModel(SprinklerLineModel sprinklerLineModel) 
{ 
    this.EstimatedFlow = sprinklerLineModel.EstimatedFlow; 
    this.EstimatedPressure = sprinklerLineModel.EstimatedPressure; 
    this.NearCrossMainDimension = new PipeDimensionModel(sprinklerLineModel.NearCrossMainDimension); 
    this.FarCrossMainDimension = new PipeDimensionModel(sprinklerLineModel.FarCrossMainDimension); 
    this.BranchLineDiameter = sprinklerLineModel.BranchLineDiameter; 
    this.LeadLinePipeFittingLength = sprinklerLineModel.LeadLinePipeFittingLength; 
    this.ExbPipeFittingLength = sprinklerLineModel.ExbPipeFittingLength; 
    this.IsDirty = sprinklerLineModel.IsDirty; 
    Init(); 
} 

void Init() 
{ 
    this.AddValidationRule(Rule.CreateRule(() => BranchLineDiameter, RuleMessage.GREATER_THAN_ZERO,() => BranchLineDiameter > 0)); 
} 
0

나는 같은 것을 할 것입니다 :

public SprinklerLineModel() 
    : this(null) 
{ 
} 

/// <summary> 
/// Copy Constructor 
/// </summary> 
/// <param name="sprinklerLineModel">Original copy of sprinklerLineModel</param> 
public SprinklerLineModel(SprinklerLineModel sprinklerLineModel) 
{ 
    this.EstimatedFlow = sprinklerLineModel.EstimatedFlow; 
    this.EstimatedPressure = sprinklerLineModel.EstimatedPressure; 
    if (sprinklerLineModel != null) 
    { 
     this.NearCrossMainDimension = new PipeDimensionModel(sprinklerLineModel.NearCrossMainDimension); 
     this.FarCrossMainDimension = new PipeDimensionModel(sprinklerLineModel.FarCrossMainDimension); 
    } 
    else 
    { 
     NearCrossMainDimension = new PipeDimensionModel(); 
     FarCrossMainDimension = new PipeDimensionModel(); 
    } 
    this.BranchLineDiameter = sprinklerLineModel.BranchLineDiameter; 
    this.LeadLinePipeFittingLength = sprinklerLineModel.LeadLinePipeFittingLength; 
    this.ExbPipeFittingLength = sprinklerLineModel.ExbPipeFittingLength; 

    this.IsDirty = sprinklerLineModel.IsDirty; 

    this.AddValidationRule(Rule.CreateRule(() => BranchLineDiameter, RuleMessage.GREATER_THAN_ZERO,() => BranchLineDiameter > 0)); 
} 

장점은 한 곳에서 implemntation을 가지고있다.

/티비