我有以下课程
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 :(得分:2)
在C#中,你不能拥有相同名称和参数但返回类型不同的方法,所以你想到的只是不起作用。有各种可能的方法来解决您的问题,但它们取决于您的确切用例:
Rule
设为通用类型Rule<T>
,并将Validate
的返回类型更改为Result<T>
。Result<Rule>
和Result<MinNumberOfCredits>
的共性提取到界面中并返回该界面。我知道所有这些解决方案都需要进一步修改。我只想给你一个方向。