接口方法中的委托参数

Delegate parameter in interface method

我提前道歉,因为我觉得我真的很想解释我想做的事情。

我的应用程序中有许多模型,每个模型都实现了一个名为“IDatabaseItem”的接口,我希望每个“IDatabaseItem”都有一个 Delete 方法,returns true 或 false,但我还希望该方法采用委托(字符串),因此在执行删除方法时,我也可以 return 一个字符串结果来判断操作是否成功。这也将允许调用者按照他们的选择处理结果。在我的应用程序中,这可能类似于 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.

通过阅读其他帖子,我认为我可能在树上咆哮,委托和接口不混合。但如有任何帮助,我们将不胜感激。

委托的声明本身就是一种类型,就像声明接口或 class 一样。在 C# 7.3 及之前的版本中,接口不支持嵌套类型。要使您的代码正常工作,您必须将委托声明移至外部范围。

public delegate void DBOperationResult(string result); // a type itself

public interface IDatabaseItem
{
    int Id { get; }
    DateTime Date { get; }

    bool Delete(DBOperationResult foo);
}

随着 C# 8.0 中 'default interface implementations' 的引入,接口已扩展为允许声明嵌套类型(如您的委托)。

有关详细信息,请参阅 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/default-interface-methods