【问题标题】:Make field/method accessible only to derived classes within same assembly? [duplicate]使同一程序集中的派生类只能访问字段/方法? [复制]
【发布时间】:2011-05-15 08:48:23
【问题描述】:

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

据我了解,C# 中的protected internalprotected 的含义相同 internal(即派生类来自同一程序集的类可访问) ,这不是我需要的。

【问题讨论】:

  • C# 不支持,根据MSDN无法在 Visual Basic 或 C# 中定义具有此可见性的方法。

标签: c# access-modifiers


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您不能阻止来自外部程序集的类编译对它的调用,但如果他们这样做了,您可以通过将此属性放在受保护的成员上来强制在运行时发生异常:

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

    【讨论】:

      【解决方案3】:

      如果类是internal,则无法在程序集之外对其进行子类化。将字段/方法设为protected,一切顺利。

      如果类必须是 public,请在程序集中的任何地方使用 internal 子类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-16
        • 1970-01-01
        • 2020-02-11
        • 2017-11-28
        • 2018-07-31
        • 2011-11-30
        • 2015-02-25
        • 1970-01-01
        相关资源
        最近更新 更多