■57065 / inTopicNo.2) |
Re[1]: C#からVB.NETへのコンバート |
□投稿者/ 魔界の仮面弁士 (2061回)-(2011/02/10(Thu) 16:26:40)
|
■No57063 (コン さん) に返信 > 上司のきまぐれで、C# express 2005 で作成したプロジェクトを、 > VB.NET expressにコンバートしなければならなくなりました。
EXE からの解析変換で良ければ、Reflector を使って行えますが、 プロジェクトファイルからの変換については知らないです。
> Web上での変換は避けたいと思っています。 今回のケースで役に立つかどうかは分かりませんが、 SharpDevelop に変換機能があるようです。 http://www.masahiko.info/it/archives/000388.html
> 都合のよいコンバートツールはありますでしょうか。。。 幾つかの機能は、VB への単純変換が困難もしくはそもそも不可能です。 そのため、機械的な変換だけでなく、手動での書き換えも併用する事になるでしょう。
・ポインタ型 →VB ではサポートされていません。直接変換は困難なため、C# 側を Marshal クラス等を使った構文で書き換えてからコンバートした方が良いでしょう。
・Office オートメーション →C# 2005 では、引数付きプロパティおよび省略可能引数がサポートされていませんが、 VB では利用可能であるため、呼び出し方を変更する必要があります。 たとえば Excel を参照設定した場合、Range.Value プロパティは、C# 2005 では get_Value(object) メソッドおよび set_Value(object, object) メソッドに 変換する事になりますが、VB では Value(Optional Object) プロパティでの 呼び出し構文に書き換える必要があります。 →C# 2005 では実行時バインディング(レイトバインド)がサポートされていないため、 Reflection を利用した複雑なコードが利用される事が稀にありますが、VB では それらをより単純なコードに置き換える事ができます(Reflection のままでも動きますが)。
・三項演算子 →VB2008 からのサポートです。VB2005 では If ステートメントへの展開が必要です。
・反復子 および yield →VB ではサポートされていません。代替クラスを用意する必要があります。
・匿名メソッド → VB2010 からのサポートです。VB2005/2008 では通常のメソッド用意して それを AddressOf 指定することで対応してください。
・null 許容型 →VB2008 からのサポートです。VB2005 では Nullable クラスでの表現が必要です。
・静的クラス →VBには該当機能がありません。「Module」または「全メンバーが Shared な Class」で 代用できますが、Module と Class では利用側のコードに差異が生じます。
・ディレクティブ →C# の #region ディレクティブは、メソッド内でも利用できますが、 VB の #Region ディレクティブは、メソッドの内側では利用できません。 また、#warning, #error, #pragma, #undef, #pragma に相当する機能は VB には用意されていません。一部、それに近いコンパイラオプションはありますが。
・コントロールのスコープ →C# の場合、フォームにコントロールを貼った場合、そのコントロールは private スコープ(VB でいうところの Private) になりますが、VB では Friend スコープ(C# でいうところの internal) が初期状態となります。 (コントロールのスコープは、デザイン時に Modifiers プロパティで変更できます)
|
|