this post was submitted on 13 Jul 2023
674 points (96.7% liked)
Programmer Humor
32602 readers
117 users here now
Post funny things about programming here! (Or just rant about your favourite programming language.)
Rules:
- Posts must be relevant to programming, programmers, or computer science.
- No NSFW content.
- Jokes must be in good taste. No hate speech, bigotry, etc.
founded 5 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
In C# it is different.
In C if I give you a pointer to a memory address, you can totally overwrite what is in that memory address, even write a new struct in there. So you're getting a "real" writable memory address. You could even write a different type of structs and break the program. You could tweak specific bytes.
In languages like Java or C# you aren't given a reference to the memory address but a reference to the object. You can only write to the object using it's own interface (methods) but you can't say "I'm going to totally overwrite this memory address with a new object".
If you receive an object in a parameter, let's say a "Person person" object and you do something like "person = new Person();" you didn't really overwrite the memory address. The original person reference that was passed in the parameter is still intact. You can only modify it with something like "person.setName(...)".
So, with real pointers you can do more stuff, but higher level languages don't want you to do that because it breaks some of their principles for what "good programming" is. In this case they are protecting encapsulation. You shouldn't be able to mess around with the memory contents of objects directly, only through their interfaces. Encapsulation is safer because objects should expose how to operate them safely via their interfaces.