3

クラスの1つの名前が変更されたため、元に戻すことができません。下位互換性を維持する必要があり、古い名前のラッパーを作成したくありません。クラス2に名前を付けたり、エイリアスを付けたりする簡単な方法はありますか?

OPによるコメントから解除:

usingディレクティブを使用するように指示しないでください。これは、コンシューマ側で実行する必要があり、ライブラリを使用しているプロジェクトを変更したくないためです。

4

2 に答える 2

6

間違いなく、最善のオプションは、リファクタリングツール(Resharperなど)を使用して、古い名前から新しい名前への変換を自動化することです。ただし、これが何らかの理由で受け入れられない場合は、次の方法があります。

タイプが異なるアセンブリにある場合は、タイプフォワーダーを使用できる場合があります。これらを使用すると、特定のタイプのすべての参照をアセンブリにリダイレクトできます...ただし、IIRCの場合は、それらを新しい名前にリダイレクトすることもできます。

それ以外の場合は、単一の.csソースファイル内でusingステートメントを適用できます。

using OldClassName = SomeNameSpace.NewClassName

ただし、多くの.csファイルを変更してこのusingステートメントを含めるのは面倒になる可能性があるため、これで問題がグローバルに解決されるわけではありません。

別の方法として、新しいタイプのサブクラスを作成し、古い名前を付けることもできます。

public class OldClassName : NewClassName

これにより、新しいクラスのエイリアシングが得られますが、重複するパブリックコンストラクターを作成し、名前が変更されたタイプへの静的メソッド呼び出しをプロキシする必要があります。これは理想からは程遠いです...そして私は一般的にこれをお勧めしません。

于 2011-02-02T19:03:44.037 に答える
0

残念ながら、ライブラリの作成者として、唯一の方法はXがYを継承することですが、これにはいくつかの注意点があります。

可能ですが、ILアセンブリで不正行為を行う可能性はほとんどありません。

于 2011-02-02T19:07:07.347 に答える