3

別の .net 名前空間のクラスを自分の名前空間のクラスとして公開できますか? 名前空間のクラスに属する関数の戻り値の型として、antlr.collections.AST クラスを使用します。その結果、ユーザーは持っている必要があります

using antlr.collections;
using myNamespace;

私の機能を使用するために、ファイルの上部にあります。myNamespace.AST を antlr.collections.AST のエイリアスにすることはできますか?

using myNamespace;

ファイルの先頭に?

4

6 に答える 6

4

コードのコンシューマーは、実際には using ステートメントを持つ必要がないことに注意してください。それらは生活を楽にするためにあるので、ソース全体に antlr.collections.Foo と antlr.collections.Bar を入力する必要はありません。

より大きな「影響」(実際に深刻な影響がある場合) は、コードの消費者が antlr.collections が定義されているアセンブリへのハード参照を必要とすることです。

ただし、それが事前に文書化されている場合、正直なところ、それほど大きな問題ではないと思います. これは、生成された DAL アセンブリと元の SubSonic アセンブリの両方への参照を必要とする、SubSonic で生成された DAL のコンシューマーと同じです。(そして、おそらくステートメントも使用します。)

依存関係は、それらが何であるかです。クラスが名前空間に分割されるのには理由があります。これは主に、組織化と名前の競合を減らすためです。あなたが言及した名前空間にどのクラスがあるかわからないので、あなたのシナリオで実際にそのような競合がどの程度発生する可能性があるかわかりません...しかし、クラスをある名前空間から別の名前空間に移動しようとするか、そのようなものが必要であるという事実を隠そうとしますそこから空のクラスを派生させることは、おそらく最良のアイデアではありません。別の参照と using ステートメントを使用しても、クラスのコンシューマーが殺されることはありません。

于 2008-09-26T11:10:07.993 に答える
2

新しい名前空間でクラスを継承する新しいクラスを作成します。理想的ではありませんが、単体テストなどに役立ちます。

ただし、なぜこれを行うのかを考える必要があります。理由により、クラスは名前空間に分割されます。

于 2008-09-26T10:38:00.923 に答える
2

新しい名前空間で同じ名前を使用してクラスを派生させるのはどうですか? 私は意味しました:

namespace MyForms {
    class Class1 : Some.Other.Namespace.Class1 {
        // ...
    }
}
于 2008-09-26T10:29:02.507 に答える
1

いいえ、できません。

クラスへのフル パスと名前は、その ID の一部です。

于 2008-09-26T10:33:20.013 に答える
1

唯一の解決策は、antlr.collections.AST 型への依存関係全体を隠すことです。

その目的のためにアダプターを使用できます。

于 2008-09-26T13:57:20.483 に答える
1

クラスから派生して派生クラスを返す場合は、戻り値の型に関するすべてのドキュメントを提供する責任を自分で負わなければなりません。

ライブラリを使用する開発者を不当に扱うことになると思います。なぜなら、彼らは実際に作業しているものが antir.collections の型であることを必ずしも認識していないからです (私はそれが何であるかを知っているわけではありませんが、それはそうではありません)ポイント)。開発者がその戻り値の型に関する情報を探して StackOverflow.com にアクセスした場合、その型が「共通」ライブラリからのものか、それともあなたのものかのどちらから情報を見つける可能性が高くなりますか?

于 2008-09-26T11:57:06.137 に答える