2012-01-02 5 views
0

클래스해결 나는 다음과 같은 한

public abstract class Rule 
    { 
     protected Rule() 
     { 
      Nodes = new List<Node>(); 
     } 
     public List<Node> Nodes { get; private set; } 
     public int NumberOfElements { get; set; } 

     public abstract Result<Rule> Validate(IEnumerable<Node> validUnits); 

    } 

지금, 또한 내가 가지고

public class MinNumberOfCredits : Rule 
{ 

    public override string ToString() 
    { 
     return string.Format(NumberOfElements); 
    } 

    public override Result<Rule> Validate(IEnumerable<Node> validUnits) 
    { 
     var totalCredits = validUnits.Sum(x => x.Credits); 
     return NumberOfElements > totalCredits ? new Result<MinNumberOfCredits>(ResultMessage.Fail, NumberOfElements) : new Result<MinNumberOfCredits>(); 
    } 
} 

문제가 내 반환 형식이 Result<Rule> 만에 있다는 것입니다 특정 클래스 i는 Result<MinNumberOfCredits>을 반환해야합니다.

+0

왜 결과 를 반환해야합니까? –

+0

왜 반환 유형을 '결과 '로 변경할 수 없습니까? – dotNETbeginner

+0

결과 와 결과 은 다른 것들이므로 기본 클래스에는 기본 규칙 만 있습니다. – user872761

답변

2

C#에서는 동일한 이름과 매개 변수를 가지지 만 반환 유형이 다른 메서드를 사용할 수 없으므로 염두에두고있는 것은 작동하지 않습니다. 거기에 여러 가지 가능한 방법은 문제를 해결하기 위해,하지만 그들은 당신의 정확한 사용 사례에 따라 달라집니다

  • Rule 제네릭 형식 Rule<T>을 확인하고 Result<T>Validate의 반환 형식을 변경합니다.
  • 공통점을 Result<Rule>Result<MinNumberOfCredits>으로 인터페이스에 추출한 다음이를 반환합니다.
  • ...

내가 그 모든 솔루션은 추가 수정이 필요하다고 알고 있어요. 나는 너에게 갈 방향을주고 싶었다.

+0

그래, 인터페이스 덕분에 ... – user872761