- 締切済み
特定の関数のみ別言語で書く
基本はC#で書いて特定の関数のみ別言語で書くっていうのは出来るのでしょうか
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Yune-Kichi
- ベストアンサー率74% (465/626)
質問をどうとるかで回答が変わりそうですが……。 大雑把に,2種類のとらえ方があります。 a.) 複数のクラス間で,使用する言語が異なる これは可能です。 例えば,MSが用意している.NET FrameworkのソースコードはほぼC#ですが,VB等から呼び出せます。 see) http://referencesource.microsoft.com/Default.aspx 方法論は二つあります。 a-1.) アセンブリを分ける a-2.) モジュールを分ける Visual Studioはa-1.のみをサポートしていて,a-2.をサポートしていません。 # ソリューション中に複数のプロジェクトを入れることで対応します。 そのため,マルチモジュールアセンブリはコマンドラインから自分で作ることになります。 その割にメリットがほとんどないため,マルチモジュールアセンブリは事実上使われていません。 # アセンブリのロードはモジュール単位なので,ロード速度が早くなる,というのはあるのですが b.) 異なる言語で作られた一つのクラスにおいて,使用する言語が異なる これは不可能です。 型がモジュールに紐付くため,partial classであっても別モジュールで定義された複数のクラスをひとつにまとめることができません。 System.Stringのソースコードなどを見ると,Nativeコードを使っていそうな部分もあることはあるのですが……。 ちなみに,b.のテスト例 ---- test1.cs ---- public partial class Test { public int Value1; } ---- test2.vb ---- Public Partial Class Test Public Value2 As Integer End Class ---- command line ---- vbc test2.vb /t:netmodule csc test1.cs /addmodule:test2.netmodule ---- result ---- Microsoft(R) Visual Basic Compiler Version 10.0.30319.1 Copyright (C) Microsoft Corporation. All rights reserved. Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1 Copyright (C) Microsoft Corporation. All rights reserved. test2.netmodule: error CS0101: 名前空間 '<グローバル名前空間>' に 'Test' の定義が既に含まれています。 test1.cs(1,22): (以前のエラーに関連するシンボルの位置)
- Tacosan
- ベストアンサー率23% (3656/15482)
もちろんできる.