| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > как передать значение string по ссылке |
| Автор: KuMa1104 1.11.2009, 20:52 | ||||||
| Всем привет!!! Интересует следующая деталь языка C#. Предположем что необходимо передать значение string по ссылке. Т.е. Как всем известно существуют типы значения и ссылочные типы. Так вот т.к. string относиться к типу значения, ТО такой код не сработает.
результат
Интересно то что и StringBuilder ss тоже передаёться как тип значения. Но иногда былобы удобно чтобы фу-й изменяли параметры таких типов.
Конечно можно к примеру сделать свой изменяемый класс-обёртку над String, перегрузить у него операторы и сделать преобразования в String и из String. Но это долго.... может возможно сделать это малой кровью? |
| Автор: Void 1.11.2009, 21:57 |
| System.String — это не тип-значение. Курить ref-параметры. |
| Автор: DragonFire 2.11.2009, 14:17 | ||
В ss передается адрес объекта. ss = new ... - мы записываем туда новый адрес. И конечно же вызывающая программа о новом адресе ничего не знает. И после выхода из функции сборщик мусора чистит твою измененную строку. string - ссылочный тип, просто неизменяемый. Читай clr via c#. |
| Автор: BinaryShadow 2.11.2009, 14:19 | ||
В C# есть передача параметров по ссылке, для инициализированных ref, для не инициализированных out.
|
| Автор: IGV 2.11.2009, 16:14 | ||||
| DragonFire, Это не совсем так. Я бы хотел немного пояснить про string и пример от KuMa1104, просто сам долго этого не понимал
String является обычным ссылочным типом, как и все остальные. В случае, когда вы пишите
Компилятор помещает литеральную строку "Начальная строка" в метаданные сборки. А потом просто ссылается на эту строку. Когда вы передаете string в метод, то реально в метод передается копия ссылки. И присваивая переменной новую литеральную строку вы изменяете новую ссылку. Поэтому ничего и не изменяется. |
| Автор: KuMa1104 2.11.2009, 18:38 |
| Вау Гаспода спасибо всем! За такое и плюсика не жалко) Всё это хорошо происнило мои мозг. Если кто то ещё хочет добавить что то что щитает интересным , то пожалуста не стесняйтесь) |