2 回答
TA贡献1820条经验 获得超10个赞
看起来您尝试使用继承来实现两种不同类型的操作。如果我正确地理解了该应用程序,并且确实进行了编译,那么即使只有一个有效,您也可以在任何操作上调用任一Success方法。也就是说,一个操作将或不会返回结果。因此,您有2种不同的操作。
编译器问题是设计问题的征兆。
设计您的类,以便只能以正确的方式使用它们。也就是说,永远不要公开不应调用的方法。这里的目的是要有2个成功方法,但是只有一个有效。那是代码的味道。
我认为问题出在这里对继承的不当使用。
方法:
抽象基类和2个继承的类。在基类中没有成功方法。
2个类,一个公共接口和2个派生接口。在构造函数中注入通用功能。
如果您重视单元可测试的代码,则最好使用后者。两者都是有效的,我稍后再做。
TA贡献1868条经验 获得超4个赞
这是您的操作方式:
public class OperationResult
{
public bool Successful { get; protected set; }
public string FailureMessage { get; protected set; }
public Exception Exception { get; protected set; }
protected OperationResult() { }
public static OperationResult Success()
{
Console.WriteLine(1);
return new OperationResult() { Successful = true };
}
public static OperationResult<T> Success<T>(T result)
{
Console.WriteLine(2);
return new OperationResult<T>(result) { Successful = true };
}
}
public class OperationResult<T> : OperationResult
{
internal OperationResult(T result) { Result = result; }
public T Result { get; private set; }
}
您的所有三个成功代码行现在都可以正常工作。
- 2 回答
- 0 关注
- 137 浏览
添加回答
举报