在C#泛型类型的上下文中,类型标识是什么?

在C#泛型类型的上下文中,类型标识是什么?,c#,generics,types,equality,C#,Generics,Types,Equality,在C#泛型类型的上下文中,类型标识是什么 我正在通过C#阅读CLR的章节。我遇到了泛型类型标识的概念 似乎阅读本章的每个人都应该清楚什么是类型标识。但我不知道这是什么 书中有这样一个例子: internal sealed class DateTimeList : List<DateTime> { // No need to put any code in here! } 内部密封类日期时间列表:列表{ //不需要在这里输入任何代码! } …您可能会丢失类型标识和等价性 请参

在C#泛型类型的上下文中,类型标识是什么

我正在通过C#阅读CLR的章节。我遇到了泛型类型标识的概念

似乎阅读本章的每个人都应该清楚什么是类型标识。但我不知道这是什么

书中有这样一个例子:

internal sealed class DateTimeList : List<DateTime> {
 // No need to put any code in here!
} 
内部密封类日期时间列表:列表{
//不需要在这里输入任何代码!
} 
…您可能会丢失类型标识和等价性 请参见以下代码中的:

Boolean sameType=(typeof(List)=typeof(DateTimeList));
从这个示例中,我可以清楚地看到类型等价性是什么(它是类型对象的等价性)。虽然我无法获得类型标识所引用的内容

那么,有人能解释一下类型标识的概念吗?

没有什么特别的
,作者不只是在泛型的上下文中使用这个词。

当您第一次使用某种类型时,会在堆上创建该类型的实例,它包含与类型相关的信息。我想您已经知道,堆上的每个对象都需要一些额外的成员。其中一个称为类型对象指针。指针指向堆上存储的相应
类型
对象。通过类型标识,author表示对
类型
对象的引用是否指向堆中的同一对象

在这种情况下,类型的标识是不同的,因为通过
typeof
获得的对象是存储在堆中的不同对象<代码>类型
日期时间列表
列表
的对象是两个不同的对象。这就是为什么
sameType
为false

internal sealed class DateTimeList : List<DateTime> {
 // No need to put any code in here!
} 
例如,在这种情况下

Boolean sameType = (typeof(List<DateTime>) == typeof(DateTimeList)); 
他提到:

这行代码(
o1
)创建了一个匿名类型,因为我创建了 不在new关键字后指定类型名称,因此编译器将 自动为我创建类型名称,而不告诉我它是什么 (这就是它被称为匿名类型的原因)

编译器在定义匿名类型方面非常聪明。如果 编译器看到您正在中定义多个匿名类型(数组中有3个新对象) 如果源代码具有相同的结构,编译器将 只为匿名类型创建一个定义,然后创建多个 该类型的实例

由于这个类型标识我们可以创建隐式类型数组 不寻常的类型的。这是因为所有对象都属于 相同匿名类型


好的,我明白你的答案。请你再澄清一点好吗?那么类型标识和等价性之间有什么区别呢?@qqqq通过等价性他指的是相同类型的值。如果您丢失了类型标识,那么就不会有任何等价性。结果将是错误的。
using DateTimeList = System.Collections.Generic.List<System.DateTime>;
Boolean sameType = (typeof(List<DateTime>) == typeof(DateTimeList)); 
// obvious that, the result is true
Boolean sameType = (typeof(List<DateTime>) == typeof(List<DateTime)); 
// Define a type, construct an instance of it, & initialize its properties
var o1 = new { Name = "Jeff", Year = 1964 }; 

var people = new[] {
 o1, 
 new { Name = "Kristin", Year = 1970 },
 new { Name = "Aidan", Year = 2003 },
 new { Name = "Grant", Year = 2008 }
};