好奇的是,.NET 4.0 CLR世界将如何调用以问号和惊叹号结尾的方法?从C#或VB.NET调用语法会是什么样的?
答案 0 :(得分:3)
我认为你必须在这里区分一些案例。
在CLR级别,没有任何问题。 CLR允许在类型和成员名称中包含比大多数语言通常可用的更大字符集(例如C#和VB.Net)。例如,在CLR级别合法包含撇号。
实际上,如果查看ECMA CLI规范的第8.5.1节,它不会明确限制字符集。它仅仅表示应该如何比较它们。
要考虑的另一个问题是如何将名称实际写入IL。当写出一个程序集并在从磁盘读取一个程序集时将其添加回来时,没有什么可以阻止IronRuby简单地排除感叹号。这种类型的映射由其他语言完成,将丑陋的名称变为有效名称。例如,如果你在IL级别查看List<T>
,它实际上写为List`1。
我并不是说IronRuby会做这些映射,只是说它们可能会这样做。我实际上对Ruby作为一种语言并不熟悉。
至于如何从VB.Net和C#中消耗它们。幸运的是,两种语言都可以选择遵循DLR与原始IronPython和IronRuby进行交互。这使得语言编写者可以灵活地将其成员公开给其他语言,并允许其他层将成员名称映射到其内部表示中。
答案 1 :(得分:1)
从C#或VB.NET,您必须使用DLR托管接口来访问这些方法,使用方法名称作为字符串。这些语言的新“动态”语法不会覆盖有效方法标识符的正常词法规则。