在C#中的公共类中,是否有办法使字段/方法只能在同一个程序集中的派生类中访问?
据我所知,C#中的protected internal
与protected
或 internal
相同(即派生类或可访问)来自同一装配的类),这不是我需要的。
答案 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
子类。