【发布时间】:2022-01-03 09:08:11
【问题描述】:
我提前道歉,因为我觉得我要解释我想要做的事情真的很糟糕。
我的应用程序中有许多模型,每个模型都实现了一个名为“IDatabaseItem”的接口,我希望每个“IDatabaseItem”都有一个返回 true 或 false 的 Delete 方法,但我也希望该方法能够接受一个委托(字符串),所以当执行删除方法时,我也可以返回一个字符串结果来判断操作是否成功。这也将允许调用者处理他们选择的结果。在我的应用程序中,这可能类似于 UI 中的弹出窗口。
这就是我认为我会如何实现这样一个东西的一种方式。
public interface IDatabaseItem
{
int Id { get; }
DateTime Date { get; }
delegate void DBOperationResult(string result);
bool Delete(DBOperationResult foo);
}
尝试上述操作时,我得到了编译器结果:
Error CS8370 Feature 'default interface implementation' is not available in C# 7.3. Please use language version 8.0 or greater.
通过阅读其他帖子,我想我可能会在树上吠叫,并且代表和接口不混合。但我们将不胜感激。
【问题讨论】:
-
您应该能够在接口之外定义委托,它应该可以工作。
-
Delegate 需要在接口之外定义。目前还不清楚如何将委托返回的值返回给接口方法调用者。
-
这是一个很奇怪的API。您想同步报告成功/失败,但使用异步回调报告失败模式?为什么不能像普通人一样使用异常?或者,您可以返回
DbOperationFailure?,其中 null 结果表示成功... -
公平积分。也许我需要重新考虑在这种情况下使用委托。也许我应该像 Aron 建议的那样使用例外,做一个“正常”的人。感谢您的反馈。