1

はっきりしないことがありますが、C#とVB.NET(主にポインターの使用)には違いがあることは理解していますが、両方に共通CLRがある場合、XNAは(たとえば)C#でのみ機能し、VBでは機能しないのはなぜですか.NETですか、それともVisual StudioへのアドインはVB.NetではなくC#を対象としており、実際、言語拡張機能は両方で機能します。

明らかな質問ならごめんなさい、私が尋ねると思いました

4

3 に答える 3

4

言語サポートを定義するのはツール セットです。たとえば、XNA は単純にすべての作業を C# で行い、C# のサポートのみを出荷しました。VB.NET でアプリを作成し、コマンド ラインから手動でコンパイルすることもできます。アプリが違法な IL (XNA がサポートしていないオペコード) にコンパイルされていない限り、アプリは引き続き実行されます。主な問題はリソースです。すべての言語の完全な開発とテストを行う人員がいないため、1 つを選びました。

于 2009-01-06T14:51:40.157 に答える
3

CLR はさまざまなプラットフォームに移植されていますが、すべてが同じというわけではありません。たとえば、XBox 360 CLR には、Reflection.Emit がなく、完全な CLR が行うすべての IL 操作さえありません。したがって、別のコンパイラは、完全な CLR では有効でも、Compact CLR では無効な IL コードを発行する場合があります。

もう 1 つの問題は、クラス ライブラリの可用性です。完全な BCL には、VB.NET コンパイラによって自動的に参照されるMicrosoft.VisualBasic名前空間が含まれています。これには、 VB6 互換関数、My 名前空間機能、および一部のコンパイラ ヘルパー関数が含まれており、一般に VB.NET ランタイムと呼ばれます。

CLR が移植されるたびに、特定のアセンブリが移植され、他のアセンブリは移植されません。XBox の場合、Microsoft.VisualBasic は移植されませんでした。これは、その名前空間からは何も参照できないことを意味します。互換性または My 名前空間を参照しないのはかなり簡単ですが、コンパイラ サービスは、明示的に呼び出さなくても、コンパイルされた IL に挿入できます。

VB.NET 8 では、文書化されておらずサポートされていない -novbruntimerefスイッチを vbc.exe に渡して、Microsoft.VisualBasic.dll を参照しないようにすることができました。残念ながら、これにより奇妙なコンパイラ エラーが発生することがあります。VB.NET 9 では、文書化およびサポートされ、名前が /vbruntime に変更されました。

3 番目のケースは、アドインと Visual Studio のサポートです。各言語のテンプレート、コード生成などをサポートするかどうかは、個々のパッケージ次第です。公式にはサポートされていませんが、一部のサード パーティが XNA 用の VB.NET テンプレートをリリースしていると思います。

要するに、技術的な問題 (CLR ポート、BCL の可用性、コンパイラ IL の出力) とサポート (テスト、資金調達、他の言語のアドイン) が混在していると思います。

于 2009-01-06T15:41:36.763 に答える
1

すべてのアカウントから、CLRに関してはVB.NETとC#は99.9999に相当します。しかし、あなたを噛むかもしれないいくつかのわずかな違いがあります。さらに、いくつかのMicrosoftブログで、CLRで実行できることがいくつかあり、VB.NETまたはC#では(まだ)プログラムできず、ILで実行する必要があることを覚えています。確かに興味深い。

于 2009-01-06T14:59:21.980 に答える