Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Who do we protect our classes from?

I'm currently learning C# and I was wondering, what is the point of declaring classes / methods private? Who are we hiding / limiting access to these classes.

Because if someone was editing the source they could just change the tag from private to public. I'm not sure how a user will be able to access these methods and what problems it would cause.

tldr; What's the point of access modifiers.

like image 580
Hexo Avatar asked Feb 12 '12 00:02

Hexo


3 Answers

Member visibility, as this feature is often called, is not a security feature. It is a convenience for the programmer, designed to help limit cross-class dependencies. By declaring a member private, you prevent other code from accessing it directly. This has two advantages:

  • if you find that a member variable gets manipulated in a way you did not intend, the amount of code you have to check is significantly smaller when the variable is private
  • you can change the inner workings of a class (everything that is declared private) without breaking the interface (everything declared public)

Member visibility is probably the most important language feature in realizing encapsulation, one of the core principles of object-oriented programming.

like image 197
tdammers Avatar answered Oct 14 '22 02:10

tdammers


This is a basic OO concept - encapsulation and has mostly nothing to do with security per se. To quote from Wikipedia (emphasis mine):

Hiding the internals of the object protects its integrity by preventing users from setting the internal data of the component into an invalid or inconsistent state. A benefit of encapsulation is that it can reduce system complexity, and thus increases robustness, by allowing the developer to limit the interdependencies between software components.

like image 43
BrokenGlass Avatar answered Oct 14 '22 03:10

BrokenGlass


It keeps your code tidy. You separate your code into a public interface, and private internals.

That way, you can change your internals without fear of breaking code that depends on your class. You can also safely assume that no other code has modified your internal state while you weren't looking.

like image 39
Blorgbeard Avatar answered Oct 14 '22 03:10

Blorgbeard