只允许同一程序集中的派生类访问字段/方法?

时间:2010-11-24 21:05:55

标签: c# access-modifiers

在C#中的公共类中,是否有办法使字段/方法只能在同一个程序集中的派生类中访问?

据我所知,C#中的protected internalprotected internal相同(即派生类可访问)来自同一装配的类),这不是我需要的。

3 个答案:

答案 0 :(得分:3)

如果将“内部”字段/方法从公共类中删除到内部类,该怎么办?然后该程序集中的所有类都可以从内部类派生:

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; }
}

答案 1 :(得分:1)

您无法阻止外部程序集中的类编译对它的调用,但是如果它们通过将此属性放在受保护的成员上,则可以强制在运行时发生异常:

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

答案 2 :(得分:1)

如果类为internal,则无法在程序集外部对其进行子类化。制作字段/方法protected,你就可以了。

如果该类必须为public,请在程序集中的任何位置使用internal子类。