什么都利用实习池?

时间:2015-05-20 13:28:00

标签: clr string-interning

编辑:查看此MSDN页面上的备注

https://msdn.microsoft.com/en-us/library/system.string.intern(v=vs.110).aspx

对于String.Intern,它提到了CLR如何与文字字符串和实习池交互。

我想知道是否还有其他一些添加对实习池的引用而不是字符串文字的例子?

我可以找到所有实习内容的明确清单吗?

1 个答案:

答案 0 :(得分:1)

为了获得实习资格,类型必须是:

1)参考类型。 Interning使用对象的引用,将其指向一般位置而不是分配给对象的堆中的区域。由于值类型只是按值处理,因此无法实现它们。

2)不可改变。被拦截的类型可以由多个被认为是独立的对象引用,并且用户甚至可能不知道它们是被实现的。因此,对象的值不能改变。

下面列出了基本的CLR类型及其对应的C#别名。除System.String之外的所有类型都是值类型。因此,除System.String之外的所有这些都是可变的。因此,只有System.String才能成为实习的候选者(是的,它是唯一被实习的类。)

  • System.Boolean bool
  • System.SByte sbyte
  • System.Int16 short
  • System.Int32 int
  • System.Int64 long
  • System.Byte字节 System.UInt16 ushort
  • System.UInt32 uint
  • System.UInt64 ulong System.Single float
  • System.Double double
  • System.Char char System.String string
  • System.DateTime N / A
  • System.Decimal decimal