C#:这可能吗? (为子接口中的IEquatable提供默认实现)
C#: Is this possible? (Providing default implementation for IEquatable in sub-interface)
我正在尝试创建一个具有 Id
属性 的接口,然后使用该 ID 实现 IEquatable
。
但是,实现中间接口的 class 抛出一个错误,表明它没有实现 IEquatable
。
我猜这种类型的功能根本不存在,但我正在努力描述这个功能 是什么 并找到任何解决方法我想做。
我想做的是让 classes 简单地实现 IntermediateInterface
并立即通过 Id
属性 要求的彼此相等接口。
这是文本代码:
public interface IntermediateInterface<T> : IEquatable<T>
where T : IntermediateInterface<T>
{
int Id { get; set; }
public new bool Equals(T other)
{
return Id.Equals(other.Id);
}
}
public class ActualType : IntermediateInterface<ActualType> {
public int Id { get; set; }
}
这是错误文本:
Error CS0535 'ActualType' does not implement interface member 'IEquatable<ActualType>.Equals(ActualType)'
这是来自 visual studio 的屏幕截图:
所以我想通了。
如果我有 IntermediateInterface 显式覆盖 Equals(使用 IEquatable 标识符),它会按我预期的方式工作。
截图:
编辑:
这是一些正确的代码(作为文本!):
public interface IntermediateInterface<T> : IEquatable<T>
where T : IntermediateInterface<T>
{
int Id { get; set; }
bool IEquatable<T>.Equals(T other)
{
return Id == other?.Id;
}
}
public class ActualType : IntermediateInterface<ActualType> {
public int Id { get; set; }
}
我正在尝试创建一个具有 Id
属性 的接口,然后使用该 ID 实现 IEquatable
。
但是,实现中间接口的 class 抛出一个错误,表明它没有实现 IEquatable
。
我猜这种类型的功能根本不存在,但我正在努力描述这个功能 是什么 并找到任何解决方法我想做。
我想做的是让 classes 简单地实现 IntermediateInterface
并立即通过 Id
属性 要求的彼此相等接口。
这是文本代码:
public interface IntermediateInterface<T> : IEquatable<T>
where T : IntermediateInterface<T>
{
int Id { get; set; }
public new bool Equals(T other)
{
return Id.Equals(other.Id);
}
}
public class ActualType : IntermediateInterface<ActualType> {
public int Id { get; set; }
}
这是错误文本:
Error CS0535 'ActualType' does not implement interface member 'IEquatable<ActualType>.Equals(ActualType)'
这是来自 visual studio 的屏幕截图:
所以我想通了。
如果我有 IntermediateInterface 显式覆盖 Equals(使用 IEquatable 标识符),它会按我预期的方式工作。
截图:
编辑:
这是一些正确的代码(作为文本!):
public interface IntermediateInterface<T> : IEquatable<T>
where T : IntermediateInterface<T>
{
int Id { get; set; }
bool IEquatable<T>.Equals(T other)
{
return Id == other?.Id;
}
}
public class ActualType : IntermediateInterface<ActualType> {
public int Id { get; set; }
}