Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Protected Classes in .NET

Can a class be protected in.NET?
Why is / isn't this possible?

like image 541
Aarsh Thakur Avatar asked Jun 19 '09 12:06

Aarsh Thakur


People also ask

What is protected class in C#?

protected: The type or member can be accessed only by code in the same class , or in a class that is derived from that class . internal: The type or member can be accessed by any code in the same assembly, but not from another assembly.

Can we create object of protected class in C#?

Introduction to Private Protected in C# Protected members can be accessed within that class or in the class that is deriving it. But protected members can never be accessed by creating an object of the class. Protected members can be accessed only through inheritance.

What is public/private and protected in C#?

public - can be access by anyone anywhere. private - can only be accessed from with in the class it is a part of. protected - can only be accessed from with in the class or any object that inherits off of the class.


2 Answers

Yes, you just cannot make them top level classes, they must be inner classes

public class Outer {     protected class Foo     {     } } 

This is fine, it means that the only classes allowed to see Foo are sub classes of Outer

class X  {     // 'Outer.Foo' is inaccessible due to its protection level     private void Flibble(Outer.Foo foo)     {     } }  class X : Outer {     // fine     private void Flibble(Outer.Foo foo)     {     } } 

Note that you cannot declare any outer class as private, protected (or protected internal) in c# since the access modifier for outer level classes defines their visibility in relation to other assemblies. Specifically visible within the assembly only (or to friends via InternalsVisibleTo) or outside the assembly.

Thus whilst the public/internal identifiers are used here for consistency really the state in IL is simply 'Public' or 'NonPublic' (as the Reflection.Emit flags show)

like image 140
ShuggyCoUk Avatar answered Sep 24 '22 23:09

ShuggyCoUk


protected visibility is used to indicate 'visible to derived classes'. This makes sense on things inside a class, but normally has no meaning at the class level.

The only exception to this is an inner class, where protected visibility means that derived classes will have access to the inner class.

like image 35
Nader Shirazie Avatar answered Sep 25 '22 23:09

Nader Shirazie