4

VB.net (2005) にいくつかのクラス (約 15 程度) があり、それらを xml にシリアル化できるようにしたいと考えています。残念ながら、それらはフレンド クラスとしてラベル付けされており、アセンブリの外部に公開することはできません。

アセンブリは、CAD システムへの com 相互運用プラグインである dll です。すべてのクラスをフレンドとして設定して、サード パーティの使用のためにアセンブリの外部に公開されないようにしました。私もそれをする必要があるかどうか疑問に思っています。クラスをパブリックに設定すると、物事をシリアライズできます。ただし、人々がアセンブリにリンクしてクラスを使用することは望ましくありません。

自分のアセンブリにリンクしている他のプログラムについても心配する必要がありますか? 実際、これが起こる可能性はあまりないと思います。ほとんどすべてのクラスにパブリック スコープを設定するという考えは好きではありません。

フレンドクラスをシリアライズ可能にする方法はありますか? それとも、私は物事を公開する必要がありますか?

乾杯、トロイ

4

2 に答える 2

2

とにかく、この「保護」は機能しません。ユーザーは、リフレクションを使用してアセンブリを読み込んでから、クラスを使用できます。そのため、クラスを公開しない理由がなくなり、物事が簡素化されます。

本当にクラスを内部に保持したい場合は、独自のシリアライゼーション コードを (完全に手動で (効率的ですが、多くの作業が必要です)、またはリフレクションを使用して) 記述するか、シリアライゼーションのみを目的として別のデータのみのクラスを提供することができます。公開することができます。次に、内部クラスのデータをシリアル化クラスにインポート/エクスポートするコードを記述するだけで、実際のコードは内部クラスにあるため、クラスは他の開発者にはあまり役に立ちません。

于 2009-09-23T12:49:17.827 に答える
1

あなたはパッケージ機能を模倣しようとしている Java の訓練を受けた人のようです。私はそれを正しく理解しましたか?:-)

クラスをフレンドにしないでください。先に進んで、それらを公開してください。それらをシリアライズ可能にしたい場合は、とにかくフレンド(パッケージ)の可視性に違反するアセンブリを効果的に貫通しており、それがシリアライズ可能ではない理由です。

それらを効果的に非公開にするがシリアライズ可能にしたい場合は、System.Reflection.BindingFlags.NonPublicフラグを見てください。Reflection を使用して、フィールド (クラスではない) をシリアライズ可能にすることができます。

于 2009-09-23T12:46:52.323 に答える