gpt4 book ai didi

C# 深入 : Type Constraint

转载 作者:行者123 更新时间:2023-11-30 21:00:57 24 4
gpt4 key购买 nike

我在深入阅读 C# 时遇到了这个我能理解的内容:

当它被限制为引用类型时,执行的比较类型完全取决于类型参数被限制为什么。

但是不能理解这个:

如果进一步限制派生自重载 == 和 != 运算符的特定类型,则使用这些重载。

如果有人能通过示例来解释这一点,我将不胜感激...... Plzz

最佳答案

==!= 是相等和非相等运算符。

这些可以被不同的类型覆盖 - 在覆盖了它们的类型中,如果用作通用类型约束,则此实现将用于使用这些运算符的比较。

对于您的示例,该行不适用,因为您没有对覆盖 == 的类型的额外约束:

static bool AreReferencesEqual<T> (T first, T second) where T : class
{
return first==second;
}

如果您有这样的类型(也可以继承),那么:

如果 T 被约束到的类型没有重载 ==,一个简单的引用相等性测试将被完成(默认的 Object实现)。

但是,如果类型确实重载了 ==(比如一个业务实体,如果两个实例具有相同的 id,则它们被认为是相同的),将使用该实现,无论您是传入该类型还是继承类型。

考虑一个覆盖==Person 类。以及一种将类型参数限制为 Person 的方法。如果您有一个 Employee 派生自 Person 并且还覆盖了 ==,当在通用中使用 == 时方法,使用的 == 将是 Person 一个。

关于C# 深入 : Type Constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14550630/

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