IEqualityComparer 错误
IEqualityComparer error
我正在按照 Nutshell 中的 C# 7.0 教程进行操作,但遇到了一个我无法修复的错误。我理解错误的方式是该方法需要是一个抽象方法,我也尝试过,但没有解决错误。而且我认为抽象 类 允许在其中使用非抽象方法。
代码如下:
public abstract class EqualityComparer<T>: IEqualityComparer, IEqualityComparer<T>
{
public abstract bool Equals(T x, T y);
public abstract int GetHashCode(T obj);
bool IEqualityComparer.Equals(object x, object y);
int IEqualityComparer.GetHashCode(object obj);
public static EqualityComparer<T> Default { get; }
}
这里是错误:
'EqualityComparer<T>.IEqualityComparer.Equals(object, object)' must declare a body because it is not marked abstract, extern, or partial
请让我知道我做错了什么。
一个abstract
class可以有abstract
methods/properties和non-abstract
methods/properties。 abstract
classes 的子 classes 必须实现基础 class
中标记为 abstract
的所有 methods/properties
abstract
methods/properties不需要在base-class中实现。但是,必须实现未标记 abstract
的基 class 中的任何 methods/properties(即具有代码)。
记住,子classes 不需要实现methods/properties未标记abstract
;需要有人来实施它们。
您遇到的错误是第二次 Equals
过载 - 这个:
bool IEqualityComparer.Equals(object x, object y);
您还需要提供正文:
int IEqualityComparer.GetHashCode(object obj);
请注意,它不是 abstract
,也没有 implementation/body。它需要看起来像:
int IEqualityComparer.GetHashCode(object obj)
{
//your code goes here - returning an int
}
你必须实现方法(显式接口实现使方法有效private
从而防止它们abstract
:你不能声明,比如 abstract bool IEqualityComparer.Equals...
),例如:
bool IEqualityComparer.Equals(object x, object y) {
if (x is T && y is T)
return this.Equals((T)x, (T)y); // known types, run Equals
else
return object.Equals(x, y); // unknown type(s), run default Equals
}
int IEqualityComparer.GetHashCode(object obj) {
if (obj is T)
return this.GetHashCode((T)obj);
else
return null == obj ? 0 : obj.GetHashCode();
}
我正在按照 Nutshell 中的 C# 7.0 教程进行操作,但遇到了一个我无法修复的错误。我理解错误的方式是该方法需要是一个抽象方法,我也尝试过,但没有解决错误。而且我认为抽象 类 允许在其中使用非抽象方法。
代码如下:
public abstract class EqualityComparer<T>: IEqualityComparer, IEqualityComparer<T>
{
public abstract bool Equals(T x, T y);
public abstract int GetHashCode(T obj);
bool IEqualityComparer.Equals(object x, object y);
int IEqualityComparer.GetHashCode(object obj);
public static EqualityComparer<T> Default { get; }
}
这里是错误:
'EqualityComparer<T>.IEqualityComparer.Equals(object, object)' must declare a body because it is not marked abstract, extern, or partial
请让我知道我做错了什么。
一个abstract
class可以有abstract
methods/properties和non-abstract
methods/properties。 abstract
classes 的子 classes 必须实现基础 class
abstract
的所有 methods/properties
abstract
methods/properties不需要在base-class中实现。但是,必须实现未标记 abstract
的基 class 中的任何 methods/properties(即具有代码)。
记住,子classes 不需要实现methods/properties未标记abstract
;需要有人来实施它们。
您遇到的错误是第二次 Equals
过载 - 这个:
bool IEqualityComparer.Equals(object x, object y);
您还需要提供正文:
int IEqualityComparer.GetHashCode(object obj);
请注意,它不是 abstract
,也没有 implementation/body。它需要看起来像:
int IEqualityComparer.GetHashCode(object obj)
{
//your code goes here - returning an int
}
你必须实现方法(显式接口实现使方法有效private
从而防止它们abstract
:你不能声明,比如 abstract bool IEqualityComparer.Equals...
),例如:
bool IEqualityComparer.Equals(object x, object y) {
if (x is T && y is T)
return this.Equals((T)x, (T)y); // known types, run Equals
else
return object.Equals(x, y); // unknown type(s), run default Equals
}
int IEqualityComparer.GetHashCode(object obj) {
if (obj is T)
return this.GetHashCode((T)obj);
else
return null == obj ? 0 : obj.GetHashCode();
}