2010-11-24 6 views
1

C#のパブリッククラスでは、同じアセンブリ内の派生クラスに対してのみフィールド/メソッドにアクセスできるようにする方法がありますか?私はC#でprotected internalを理解して何からフィールド/メソッドは、同じアセンブリ内の派生クラスに対してのみアクセス可能にしますか?

は私が必要なものではない、(派生クラスと同じアセンブリからまたはクラスへのアクセスIE)protectedまたはinternalと同じ意味します。

+0

[MSDN](http://msdn.microsoft.com/en-us/library/system)によれば、C#はこれをサポートしていません。 .reflection.methodbase.isfamilyandassembly.aspx):Visual BasicまたはC#でこの可視性を持つ_Methodを定義することはできません。 –

答えて

1

あなたはそれへの呼び出しをコンパイルから外部のアセンブリからクラスを防ぐことはできませんが、あなたが保護されたメンバーに、この属性を置くことによって、彼らがしなければ、実行時に発生する例外を強制することができます。

[System.Security.Permissions.StrongNameIdentityPermission(
    System.Security.Permissions.SecurityAction.LinkDemand, 
    PublicKey = "...<Your assembly's full public key>...")] 
1

クラスがinternalの場合、アセンブリの外部にサブクラス化する方法はありません。フィールド/メソッドをprotectedにして、あなたはいいですね。

クラスがpublicである必要がある場合は、アセンブリ内のどこでもinternalサブクラスを使用します。

2

「内部」フィールド/メソッドをパブリッククラスから内部クラスに削除した場合はどうなりますか?そのアセンブリ内のすべてのクラスは、内部クラスから派生する可能性があります。

public abstract class MyClass 
{ 
    public string Name { get; set; } 
} 

// Only classes in this assembly can derive from this class 
internal abstract class InternalClass : MyClass 
{ 
    protected string Other { get; set; } 
} 
関連する問題