3

同様の質問よりも指摘されているため、これが重複と見なされないことを願っています(C#からVB.netへの変換ユーティリティの特定の弱点について知りたいです)。

私はこの.netコードコンバーターのようなツールを使用してクラスライブラリをVBに変換することを検討してきました。これは、私のグループでC#に慣れているのは私だけだからです。私が遭遇した問題は、自動プロパティの適切なVBが生成されないことです。空のget/setルーチンを作成します。

したがって、この:

public string TransactionType { get; private set; }

これになります:

Public Property TransactionType() As String
    Get
    End Get
    Private Set(ByVal value As String)
    End Set
End Property

ここここにリンクされているツールにも同様の問題があります。有効なプロパティを作成するものもありますが、設定されたルーチンのアクセスレベルを尊重していません。

副次的な質問-DeveloperFusionでコンバーターを修正する場合、次のようなものを返すようにしますか?

Private _TransactionType As String
Public Property TransactionType() As String
    Get
        Return _TransactionType
    End Get
    Private Set(ByVal value As String)
        _TransactionType = value
    End Set
End Property
4

5 に答える 5

4

このシナリオをサポートするようにコードジェネレーターを更新しました。私たちがうまくやっていない他の人を見つけたら、私に連絡してください。

于 2008-11-03T15:43:52.067 に答える
2

コードをコンパイルし、Red-Gateのリフレクターhttp://www.red-gate.com/products/reflector/index.htmのようなものを使用して変換を処理することをお勧めします。今では「完璧」ではなく、自動プロパティを処理するかどうかはわかりません(想像はしますが)。

これを可能にするのは、.NET言語をILにコンパイルすると、まったく同じになるということです。言語はその上にあるもう1つの層です。したがって、ネイティブ言語で同じものを見る2つのプロパティは、まったく同じILコードにコンパイルされます。したがって、Reflectorなどを使用してこれを他の言語に戻すのは簡単で迅速です。

于 2008-10-06T15:08:57.400 に答える
2

リフレクターを使用してコードを変換する自動化方法を探しているときにこれに出くわしました (他の言語 (PowerShell でさえも) でコードを生成するためのプラグインがいくつかあるため) ですが、不思議に思ったので試してみました。互換性を .Net 3.5 に設定すると、例が次のように変換されます。

Property TransactionType As String
  Public Get
  Private Set(ByVal value As String)
End Property

掘り下げると、VB.NetまたはC#でエクスポートされないコンパイラ生成メソッドがあることが報告されます...ただし、2.0に切り替えると、同じコードがこれを生成します:

Property TransactionType As String
    Public Get
        Return Me.<TransactionType>k__BackingField
    End Get
    Private Set(ByVal value As String)
        Me.<TransactionType>k__BackingField = value
    End Set
End Property

<CompilerGenerated> _
Private <TransactionType>k__BackingField As String

PS: Reflector のような逆アセンブラーを使用してコードを生成しようとする場合は、変数の適切な名前を取得できるように .pdb ファイルを保持することを忘れないでください ;)

于 2008-10-16T16:57:26.180 に答える
1

あなたの副次的な質問への答えとして:はい、そのコードは私が生成するものとほぼ同じです。変数の名前を「話せない」(つまり、コードで参照できない)ようにするというC#コードの機能を正確に実行することはできませんが、おそらく十分に近いものです。

于 2008-10-06T15:16:43.500 に答える
1

SharpDevelop(#developと書かれることもあります)をチェックすることをお勧めします。これはオープンソースの.NETIDEであり、特に(いくつかの問題がありますが)C#からVB.NETに、またはその逆に変換できます。

于 2008-10-06T15:17:05.980 に答える