Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IronRuby-.NET4.0-方法名称末尾的问号和感叹号_.net_Syntax_Ironruby_Dynamic Language Runtime - Fatal编程技术网

IronRuby-.NET4.0-方法名称末尾的问号和感叹号

IronRuby-.NET4.0-方法名称末尾的问号和感叹号,.net,syntax,ironruby,dynamic-language-runtime,.net,Syntax,Ironruby,Dynamic Language Runtime,只是好奇.NET4.0CLR世界将如何调用以问号和惊叹号结尾的方法?从C#或VB.NET调用时,语法会是什么样子?我认为您必须在这里稍微区分一下这些情况 在CLR级别,根本没有问题。CLR允许在类型和成员名称中包含比大多数语言(如C#和VB.Net)通常可用的更大的字符集。例如,在CLR级别包含撇号是合法的 事实上,如果您查看ECMA CLI规范的第8.5.1节,它并没有明确限制字符集。它只是表示应该如何比较它们 另一个要考虑的问题是这些名字实际上是如何写到IL的。没有什么能阻止IronRuby

只是好奇.NET4.0CLR世界将如何调用以问号和惊叹号结尾的方法?从C#或VB.NET调用时,语法会是什么样子?

我认为您必须在这里稍微区分一下这些情况

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

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

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

我并不是说IronRuby做了这些映射,只是说它们有可能做。事实上,我对Ruby作为一种语言很不熟悉

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

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