2

C# でこれを行うと、次のようにコンパイルされます。

namespace Name
{
    public class Test
    {
    }

    public class TestUse
    {
        private global::Name.Test test;
    }
}

ただし、VB.NET で同じことを試みると、次のようにはなりません。

Namespace Name
    Public Class Test
    End Class

    Public Class TestUse
        Private test As Global.Name.Test
    End Class
End Namespace

("Test" の使用方法によっては) 「'Name' は '<Default>' のメンバーではありません」というメッセージが表示されます。または「タイプ 'Name.Test' が定義されていません。」私のエラーリストに。私はそれを機能させる 2 つの方法を見つけましたが、どちらもユーザーに期待するのは合理的ではありません。1 つは、プロジェクト プロパティから「ルート名前空間」を削除することです。もう 1 つは、"Global" と "Name" の間にその名前空間を含めることです。

CodeDom を使用して C# と VB.NET の両方のコードを生成するカスタム ツールを作成しました。これが、上記の 2 つの修正のいずれも実行できない理由です。ユーザーが空のルート名前空間を持つことを期待することはできません。また、コード生成で VB 固有のトリックを実行する必要はありません (一種の言語に中立なツールを使用する目的ではないでしょうか?) 「ルート名前空間」を選択し (頭のてっぺんからどのように知っているわけではありません)、それをコード生成に含めるなどです。

グローバル修飾子も除外したくありません。生成された出力に不適切な名前を選択するユーザーからツールを保護するためです。これにどう対処すべきかについて誰か提案がありますか?

4

1 に答える 1

2

いずれにせよ、どちらかの言語に対して異なるコード生成タスクを実行する必要があることを考えると、そのコードを生成するための違いのバケツのもう1つのドロップになります。

デフォルトの名前空間を挿入するVB固有のトリックでのコーディングは、他の実装の詳細と比較して、一見したところそれほど大きな問題ではありません。

幸運を!

于 2009-12-12T21:57:02.303 に答える