c# – 泛型如何实现结构?

c# – 泛型如何实现结构?,第1张

概述我在想这个.类显然是由ptr传递的.我怀疑结构是通过复制传递但我不确定. (对于一个int数组而言,将每个元素都设置为ptr并将ptrs传递给ints似乎是浪费) 但想一想,List< MyStruct>无法知道我的结构的大小.我这样做会发生什么?是否有“List`1”的多个副本,每次我使用它与存储大小,它没有它创建一个新的实现? (调整T等的新偏移量). 这可能有意义,因为源将在DLL内部的CI 我在想这个.类显然是由ptr传递的.我怀疑结构是通过复制传递但我不确定. (对于一个int数组而言,将每个元素都设置为ptr并将ptrs传递给ints似乎是浪费)

但想一想,List< MyStruct>无法知道我的结构的大小.我这样做会发生什么?是否有“List`1”的多个副本,每次我使用它与存储大小,它没有它创建一个新的实现? (调整T等的新偏移量).

这可能有意义,因为源将在DLL内部的CIL中.但我完全猜测,它是如何完成的?也许是ECMA标准的参考或页面#?

解决方法 泛型使用开放和封闭泛型类型的概念:参数化泛型类定义(即List< T>)是一种开放泛型类型,运行时为代码中的每个不同用途生成一个封闭的泛型类型,即不同的类型为List< int>创建了类型和列表< MyStruct> – 对于每个封闭的泛型类型,T的大小和类型在运行时是已知的.

从MSDN开始澄清:

When a generic type or method is
compiled into Microsoft intermediate
language (MSIL),it contains Metadata
that IDentifIEs it as having type
parameters. How the MSIL for a generic
type is used differs based on whether
the supplIEd type parameter is a value
type or reference type.

When a generic type is first
constructed with a value type as a
parameter,the runtime creates a
specialized generic type with the
supplIEd parameter or parameters
substituted in the appropriate
locations in the MSIL. Specialized
generic types are created one time for
each unique value type that is used as
a parameter.

Generics work somewhat differently for reference types. The first time a generic type is constructed with any reference type,the runtime creates a specialized generic type with object references substituted for the parameters in the MSIL. Then,every time that a constructed type is instantiated with a reference type as its parameter,regardless of what type it is,the runtime reuses the prevIoUsly created specialized version of the generic type. This is possible because all references are the same size.

总结

以上是内存溢出为你收集整理的c# – 泛型如何实现结构?全部内容,希望文章能够帮你解决c# – 泛型如何实现结构?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248867.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存