2012-04-05 27 views
1

私はDALとしてmassive.csを使用しますが、私は自分の子供用のリストを持つモデルを作成します。Type.GetProperties()がオブジェクト内のプロパティにアクセスするのを防ぐ方法

問題は私がGetProperties()からそれらを隠す良い方法を見つけられないということです。 Massiveはexpandoオブジェクトを作成するためにそれを使用していますが、重い編集をせずにこれらのプロパティを隠す良い方法は考えられません。属性などがありますか?

+0

重要な部分は、まだアクセスする必要のある部分です。つまり、あなたの他のコードはまだそれらのプロパティを利用していますか?libなどの内部にありますか? – NSGaga

+0

プロパティはpublicである必要がありますが、GetProperties()では表示されません。内部はほとんど機能しますが、引き続きASPXページのプロパティにアクセスする必要があります。 –

答えて

4

大量使用the overload of GetProperties() that takes no parameters (massive.cs:76)。ドキュメントに従って、そのメソッドは "現在のタイプのすべてのパブリックプロパティを返します。"

さらに、「少なくとも1つのアクセサが公開されている場合、プロパティはリフレクションに対してパブリックと見なされます。」 getterとsetterがプライベートであるか、または明示的なインタフェース実装であることを確認してください。

+0

問題は私が内部(私のアプリケーションの残りの部分にアクセスできるようにする)にすると、私はASPXページでそれを使用する能力を失うが、GetPropertiesからGettedされていない...私は、今行っている。 –

+0

それから私が示唆したように明示的なインターフェイスの実装にしてください。明示的なインタフェースゲッターとセッターは、Massiveが使用しているメソッドを介して公開されるべきではありません。 –

+0

理由は、それらがインターフェイスを通じて公開されていても、Defaultバインディングフラグは宣言されたプロパティのみを取得するからです。 –

2

いくつかのコードを隠そうとしているようですね?もしそうなら、修飾子をinternalまたはprivateに変更する必要があります。私はそれがpublicであると仮定します。それ以外の場合は、難読化によってコードを他の人が使用できないようにキーを追加することができます。ただし、私の知る限りコードを非表示にする完全な方法はありません。

関連する問題