Make field/method accessible only to derived class

2019-08-11 00:44发布

问题:

This question already has an answer here:

  • How to make a property protected AND internal in C#? 7 answers

On a public class in C# is there a way to make a field/method accessible only to derived classes within the same assembly?

From what I understand protected internal in C# means the same as protected or internal (ie accessible to derived classes or classes from the same assembly), which is not what I need.

回答1:

What if you removed the "internal" only fields/methods from the public class to an internal class. Then all of the classes in that assembly could derive from the internal class:

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:

You can't prevent a class from an external assembly from compiling a call to it, but you can force an exception to occur at runtime if they do by putting this attribute on your protected member:

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


回答3:

If the class is internal, there will be no way to sub-class it outside of the assembly. Make the fields/methods protected and you're good to go.

If the class must be public, use an internal sub-class everywhere within your assembly.