接口方法中的委托参数
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' 的引入,接口已扩展为允许声明嵌套类型(如您的委托)。
我提前道歉,因为我觉得我真的很想解释我想做的事情。
我的应用程序中有许多模型,每个模型都实现了一个名为“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' 的引入,接口已扩展为允许声明嵌套类型(如您的委托)。