关于c#:String索引器如何工作?


How does String indexer work?

通过观察ILSpy中的System.String类,我发现了以下索引器:

1
2
3
4
5
6
public extern char this[int index]
{
   [__DynamicallyInvokable, SecuritySafeCritical]
   [MethodImpl(MethodImplOptions.InternalCall)]
   get;
}

这个索引器按索引从字符串中提取字符,并限制其setter(我想是使其不可变)。但是这个吸气剂是怎么工作的?它从哪里提取炭?调试器如何自动实现这个索引器getter?


MethodImplOptions.InternalCall的描述指出:

The call is internal, that is, it calls a method that is implemented within the common language runtime.

因此,getter的实现方式取决于您使用的运行时(.NET 2.0,.NET 4.0,…),该实现不是包含System.String的库的一部分。

如果您对这种方法如何在C中实现感到好奇,可以看一下

  • System.String或
  • 已发布的Microsoft CLR源版本。