.NET 4.0 CLR の世界では、疑問符と感嘆符で終わるメソッドをどのように呼び出すのでしょうか? C# または VB.NET からの呼び出しの構文はどのようになりますか?
2 に答える
ここでケースを少し区別する必要があると思います。
CLR レベルではまったく問題ありません。CLR を使用すると、ほとんどの言語 (C# や VB.Net など) で通常使用できるよりもはるかに多くの文字セットを型およびメンバー名に含めることができます。たとえば、アポストロフィを含めることは CLR レベルで合法です。
実際、ECMA CLI 仕様のセクション 8.5.1 を見ると、文字セットが明示的に制限されていません。それは単にそれらがどのように比較されるべきかを示すだけです。
考慮すべきもう 1 つの問題は、名前が実際に IL に書き込まれる方法です。IronRuby がアセンブリを書き出すときに感嘆符を単純に除外し、ディスクからアセンブリを読み取るときに感嘆符を再び追加することを止めるものは何もありません。このタイプのマッピングは、醜い名前を有効な名前に変換するために他の言語によって行われます。たとえばList<T>
、IL レベルを見ると、実際には List`1 として書き出されます。
IronRuby がこれらのマッピングを行うと言っているのではなく、単に可能であると言っているだけです。実は私は言語としての Ruby にあまり詳しくありません。
それらがVB.NetおよびC#からどのように消費されるかについて。幸いなことに、両方の言語には、未加工の IronPython および IronRuby と対話するための DLR に従うオプションがあります。これにより、言語の作成者はメンバーを他の言語に公開する方法に柔軟性を持たせ、メンバー名を内部表現にマップできる別のレイヤーを使用できます。
C# または VB.NET から、メソッド名を文字列として使用して、DLR ホスティング インターフェイスを使用してこれらのメソッドにアクセスする必要があります。これらの言語の新しい「動的」構文は、有効なメソッド識別子に関する通常の字句規則をオーバーライドしません。