Зачем нам нужны ссылочные типы в .NET - PullRequest
2 голосов
/ 10 февраля 2012

Зачем нам нужны ссылочные типы в .NET?

Я могу вспомнить только 1 случай, когда он поддерживает обмен данными между различными функциями и, следовательно, обеспечивает оптимизацию хранилища.

Кроме этого я не мог перечислить ни одну причину, зачем нужны ссылочные типы?

Ответы [ 3 ]

27 голосов
/ 10 февраля 2012

Зачем нам нужны ссылочные типы в .NET? Я могу думать только об одной причине: он поддерживает совместное использование данных и, следовательно, обеспечивает оптимизацию хранилища.

Вы ответили на свой вопрос. Вам нужна лучшая причина, чем это?

Предположим, что каждый раз, когда вы хотите отсылать к книге The Hobbit, вместо этого вы должны сделать копию всего текста . То есть вместо того, чтобы сказать «Когда я читал The Hobbit на днях ...», вы должны были бы сказать «Когда я читал 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. на днях ...»

Теперь предположим, что каждый раз, когда вы использовали базу данных в программе, вместо со ссылкой на базу данных, вы просто делали полную копию всей базы данных каждый раз, когда вы использовали любой его любым образом . Как вы думаете, как быстро будет работать такая программа?

Ссылки позволяют вам писать предложения, которые говорят о книгах, используя их названия вместо их содержания. Типы ссылок позволяют писать программ , которые манипулируют объектами с использованием небольших ссылок , а не огромных объемов данных .

10 голосов
/ 10 февраля 2012
class Node {
    Node parent;
}

Попробуйте реализовать это без ссылочного типа. Насколько большой это будет? Насколько большой будет строка? Массив? Сколько места нужно зарезервировать в стеке для:

string s = GetSomeString();

Как будут использоваться какие-либо данные в методе, который не относится только к одному пути вызова? Многопоточный код, например.

5 голосов
/ 10 февраля 2012

Три причины, которые я могу придумать, вне головы:

  1. Вы не хотите непрерывно копировать объекты каждый раз, когда вам нужно передать их в метод или коллекциюТип.

  2. При переборе коллекций может потребоваться изменить исходный объект новыми значениями.

  3. Ограниченное пространство стека.

...