gpt4 book ai didi

c# - 为什么除了 Equals(Object) 还要实现 Equals(type)?

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:57 26 4
gpt4 key购买 nike

当我需要定义我自己的 Equals 方法时,我通常只在我的类中覆盖 Equals(Object)

但是MSDN说:

It is also recommended that in addition to implementing Equals(object), any class also implement Equals(type) for their own type, to enhance performance.

但是它如何提高性能呢?我只能调用这两种方法中的一种,不是吗?

最佳答案

结构没有装箱,可以直接调用所有类型(而不是虚拟调用)。

struct MyStruct
{
public int v;
public override bool Equals(Object other) {}
}

如果您不提供采用 MyStruct 的显式方法,则每次调用 myFirst.Equals(myOther) 时都必须将 MyStruct 装箱。如果您确实提供了 Equals(MyStruct other),那么编译器将选择该方法而不是更通用的 Equals(Object),从而避免对结构进行装箱。

对于所有类型,您可以提供许多简单的 Equals(MyType) 实现,因为您已经知道该类型。如果方法不是虚拟的,编译器/JIT 也可以更好地优化调用,因为更具体的版本不需要是虚拟的。

关于c# - 为什么除了 Equals(Object) 还要实现 Equals(type)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12633380/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com