3

只是好奇.NET 4.0 CLR 世界将如何调用以问号和感叹号结尾的方法?从 C# 或 VB.NET 调用的语法是什么样的?

4

2 回答 2

3

我认为你必须在这里区分一下这些情况。

在 CLR 级别上根本没有问题。CLR 允许在类型和成员名称中包含比大多数语言(例如 C# 和 VB.Net)通常可用的更大的字符集。例如,在 CLR 级别包含撇号是合法的。

事实上,如果您查看 ECMA CLI 规范的第 8.5.1 节,它并没有明确限制字符集。它仅表示应如何比较它们。

要考虑的另一个问题是名称实际上是如何写入 IL 的。没有什么可以阻止 IronRuby 在写出一个程序集时简单地排除感叹号,并在从磁盘读取一个程序集时将它们添加回来。这种类型的映射由其他语言完成,以将丑陋的名称转换为有效的名称。例如,如果您查看List<T>IL 级别,它实际上被写为 List`1。

我不是说 IronRuby 做这些映射,只是说他们有可能做。我实际上对 Ruby 作为一门语言非常陌生。

至于它们是如何从 VB.Net 和 C# 中使用的。幸运的是,这两种语言都可以选择遵循 DLR 来与原始 IronPython 和 IronRuby 交互。这允许语言编写者灵活地将其成员暴露给其他语言,并允许他们可以将成员名称映射到其内部表示的另一个层。

于 2009-09-11T15:39:48.387 回答
1

在 C# 或 VB.NET 中,您必须使用 DLR 托管接口来访问这些方法,使用方法名称作为字符串。这些语言中新的“动态”语法不会覆盖它们对有效方法标识符的正常词法规则。

于 2009-09-11T15:52:41.540 回答