在C#泛型类型的上下文中,类型标识是什么?
在C#泛型类型的上下文中,类型标识是什么 我正在通过C#阅读CLR的章节。我遇到了泛型类型标识的概念 似乎阅读本章的每个人都应该清楚什么是类型标识。但我不知道这是什么 书中有这样一个例子:在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! } 内部密封类日期时间列表:列表{ //不需要在这里输入任何代码! } …您可能会丢失类型标识和等价性 请参
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 }
};