C# 深入探讨 : Type Constraint

标签 c#

我正在深入阅读 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/

相关文章:

c# - StackExchange Redis C# 如何运行 LUA 脚本 - 需要更好的真实示例

c# - 在 Xamarin Forms 中通过 App.xaml.cs 动画打开 MainPage

c# - Razor Pages 在类方法之间保存数据

c# - 无法为通用可枚举任务设置起订量模拟

c# - 如何为特定路由 Asp.Net MVC 构造我的操作方法

c# - 如何让 RIA 在生成实体时忽略某个属性?

c# - 生成和保存 ZedGraph 图而不显示在表单上

c# - 返回使用另一个异步函数的异步任务

c# - 我可以使用其他类的函数作为委托(delegate)吗?

c# - Log4net 缓冲区大小不起作用