2009-07-01 17 views
3

特定のクラスのみが別のクラスのプロパティに対して読み書きアクセスを許可し、デザインモードでの継承構造を持たないようにすることができます。ネット?クラスプロパティの読み込み/書き込みアクセスを.NET内の特定のクラスに制限する

クラスにパブリックプロパティがある場合、特定のクラスのみがこれらのプロパティを表示できますか?

デザインモードでは実行できない場合、実行時に。私はセットでフラグを使用してステートメントを取得する奇妙な方法を知っているが、私は良い方法があると思う。

答えて

4

は、C#にはfriendのアクセスがありません。 public/protected/internal[InternalsVisibleTo]を含む)がありますが、それ以上の粒度はありません(タイプ間レベル)。そう、いいえ。

+0

+1はとても正確です! ;-) – Cerebrus

2

あなたがC#でinternalキーワードを使用して、これを実装することができます

internalキーワードは、種類や型メンバのアクセス修飾子 です。 内蔵型またはメンバーは、この例のように、唯一の 同じアセンブリ内のファイル内でアクセス です:

public class BaseClass 
{ 
    // Only accessible within the same assembly 
    internal static int x = 0; 
} 

も参照してください:Practical usings of “internal” keyword in C#

+1

また、他のアセンブリで特定のものを使用できるようにするには、InternalsVisibleToを使用します。マイクロソフトでは、内部テストを単位テストクラスに表示するためにこれを行っています。 – RichardOD

+0

これは、同じアセンブリ内のすべてに対して機能します。それはまだ私にとっては広すぎます。私はクラスが別のクラスだけを信頼するようにしたい。 1つのクラスはDALにあり、もう1つはビジネスレイヤーにあるため、同じアセンブリに配置すると分離が解除されます。 –

0

プロパティをパブリックにすると、誰でもそのプロパティにアクセスできます。それらを内部、保護、または非公開にしても、誰もリフレクションを使用してアクセスできます。使用を止めたい場合はのようにMitchをご利用ください。

この制約があるセキュリティ上の理由がある場合は、Code Access Securityを使用してプロパティを保護してください。これは簡単にまとめることができないことに注意してください - あなたのセキュリティモデルとあなたが公開するアクセス許可に考えを入れなければなりません。また、これはアセンブリレベルで行われなければならず、アプリケーションの展開に影響することに気が付きます。

あなたはおそらく深い何かをする必要はありません。おそらく、明示的に実装されたインターフェイスの背後に隠すことによって、人々がそれらのプロパティにアクセスすることを「阻止する」ことができます。

+0

CASはしばしばアクティブではない(フルトラストなど) –

関連する問題