开发者

Make field/method accessible only to derived classes within same assembly? [duplicate]

开发者 https://www.devze.com 2023-01-27 00:42 出处:网络
This question already has answers here: 开发者_开发技巧 How to make a property protected AND internal in C#?
This question already has answers here: 开发者_开发技巧 How to make a property protected AND internal in C#? (8 answers) Closed 9 years ago.

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.


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


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>...")]


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消