Question

Why do we need reference types in .NET?

I can think of only 1 cases, that it support sharing data between different functions and hence gives storage optimization.

Other than that I could not enumerate any reason, why reference types are needed?

Was it helpful?

Solution

Why do we need reference types in .NET? I can think of only one reason: that it support sharing of data and hence gives storage optimization.

You've answered your own question. Do you need a better reason than that?

Suppose every time you wanted to refer to the book The Hobbit, you had to instead make a copy of the entire text. That is, instead of saying "When I was reading The Hobbit the other day...", you'd have to say "When I was reading In a hole in the ground there lived a hobbit... [all the text] ... Well thank goodness for that, said Bilbo, handing him the tobacco jar. the other day..."

Now suppose every time you used a database in a program, instead of referring to the database, you simply made a full copy of the entire database, every single time you used any of it in any way. How fast do you think such a program would be?

References allow you to write sentences that talk about books by use of their titles instead of their contents. Reference types allow you to write programs that manipulate objects by using small references rather that enormous quantities of data.

OTHER TIPS

class Node {
    Node parent;
}

Try implementing that without a reference type. How big would it be? How big would a string be? An array? How much space would you need to reserve on the stack for:

string s = GetSomeString();

How would any data be used in a method that wasn't specific to one call-path? Multi-threaded code, for example.

Three reasons that I can think of off the top of my head.

  1. You don't want to continually copy objects every time you need to pass them to a Method or Collection Type.

  2. When iterating through collections, you may want to modify the original object with new values.

  3. Limited Stack Space.

If you look at value types like int, long, float you can see that the biggest type store 8 bytes or 64 bits.

However, think about a list or an array of long values, in that case, if we have a list of 1000 values then the worst case will take 8000 bytes.

Now, to pass by value 8000 bytes will make our program to run super slow, because the function that took the list as a parameter will now have to copy all these values into a new list and by that we loose time and space.

That's why we have reference types, because if we pass that list then we don't lose time and space to copy that list because we pass the address of the list in the memory.

The reference type in the function will work on the same address as the list you passed, and if you want to copy that list you can do that manually.

By using reference types we save time and space for our program because we don't bother to copy and save the argument we passed.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top