我正在深入阅读 C# 并发现了我能理解的内容:
当它被限制为引用类型时,执行的比较类型 确切取决于类型参数被限制为什么。
但无法理解这一点:
如果进一步限制派生自重载 == 和 != 运算符的特定类型,则使用这些重载。
如果有人能通过示例解释这一点,我将非常感激......Plzz
最佳答案
==
和 !=
是相等和不相等运算符。
这些可以被不同类型覆盖 - 在覆盖它们的类型中,如果用作泛型类型约束,则此实现将用于使用这些运算符进行比较。
在您的示例中,该行不适用,因为您对覆盖 ==
的类型没有附加约束:
static bool AreReferencesEqual<T> (T first, T second) where T : class
{
return first==second;
}
如果您有这样的类型(也可以继承),那么:
如果T
所约束的类型没有重载==
,则会进行简单的引用相等性测试(默认的Object
实现)。
但是,如果类型确实重载==
(例如一个业务实体,如果两个实例具有相同的id
,则它们被视为相同),则将使用该实现,无论您传入该类型还是继承类型。
考虑一个覆盖 ==
的 Person
类。以及将类型参数限制为 Person
的方法。如果您有一个从 Person
派生的 Employee
并且还覆盖 ==
,则在泛型中使用 ==
时方法时,使用的 ==
将是 Person
之一。
关于C# 深入探讨 : Type Constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14550630/