2012-01-02 38 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>但在具體的班級我必須返回Result<MinNumberOfCredits>

+0

爲什麼你需要返回Result ? – 2012-01-02 10:32:05

+0

爲什麼你不能將返回類型改爲'Result '? – dotNETbeginner 2012-01-02 11:17:40

+0

因爲結果和結果是不同的東西,所以在基類中我只有基本規則。 – user872761 2012-01-02 12:17:19

回答

2

在C#中,您不能擁有具有相同名稱和參數但返回類型不同的方法,因此您所想的只是不起作用。有一個各種可能的方法來解決你的問題,但他們依靠你的確切使用情況:

  • Rule泛型類型Rule<T>和改變Validate返回類型Result<T>
  • Result<Rule>Result<MinNumberOfCredits>的公共性提取到接口中並返回該接口。
  • ...

我知道,所有這些解決方案將需要進一步的修改。我只是想給你一個方向去。

+0

是的,謝謝,界面幫助我... – user872761 2012-01-02 12:13:57