Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# access modifier for exposing class only within namespace

In java you have package level protection that ensures classes are only usable within the package.

Namespaces in C# act more or less like packages. But C# does not have a protection level for protecting classes within a namespace.

Is there a specific reason for this?

like image 310
Jaco Avatar asked Aug 27 '13 14:08

Jaco


People also ask

What do you mean by C?

C is a structured, procedural programming language that has been widely used both for operating systems and applications and that has had a wide following in the academic community. Many versions of UNIX-based operating systems are written in C.

Is C language easy?

C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.

Why is C programming language important?

Being a middle-level language, C reduces the gap between the low-level and high-level languages. It can be used for writing operating systems as well as doing application level programming. Helps to understand the fundamentals of Computer Theories.

Why is C called a mid level programming language?

C has the features of both assembly level languages i.e low-level languages and higher level languages. So that's why C is generally called as a middle-level Language. The user uses C language for writing an operating system and generates menu driven customer billing system.


3 Answers

There is no such access modifier: the closest modifier is internal, but the unit of protection is the assembly in which the class resides, not its namespace.

One could argue that it is possible to achieve similar level of control using internal, because both kinds of restriction keep outsiders from accessing the implementation details of your library. The only person to whom it makes a difference is you, the writer of the library, and you are in full control of what to expose and what to hide anyway. Essentially, it means that if you do not want to use a class outside its namespace, simply refrain from using it; if the class is internal, nobody else will be able to use that class either.

like image 132
Sergey Kalinichenko Avatar answered Oct 23 '22 03:10

Sergey Kalinichenko


In .NET there are assemlies(dll or exe files), you can use internal modifier to limit access only within the same assembly

like image 26
Alexandr Mihalciuc Avatar answered Oct 23 '22 02:10

Alexandr Mihalciuc


Is there a specific reason for this?

Mostly, it's because there are some key differences between packages and namespaces

To simplify what's already been said in the linked question and here: Namespaces in C# are mostly to help with organizing an assembly's contents, both internally and externally. Java packages have more in common with C# assemblies, and there is an access modifier in C# that restricts to the assembly level: internal.

like image 2
User Avatar answered Oct 23 '22 04:10

User