![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
KuMa1104 |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
Всем привет!!!
Интересует следующая деталь языка C#. Предположем что необходимо передать значение string по ссылке. Т.е. Как всем известно существуют типы значения и ссылочные типы. Так вот т.к. string относиться к типу значения, ТО такой код не сработает.
результат
Интересно то что и StringBuilder ss тоже передаёться как тип значения. Но иногда былобы удобно чтобы фу-й изменяли параметры таких типов.
Конечно можно к примеру сделать свой изменяемый класс-обёртку над String, перегрузить у него операторы и сделать преобразования в String и из String. Но это долго.... может возможно сделать это малой кровью? -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
||||||
|
|||||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
System.String — это не тип-значение.
Курить ref-параметры. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: 1 Всего: 9 |
В ss передается адрес объекта. ss = new ... - мы записываем туда новый адрес. И конечно же вызывающая программа о новом адресе ничего не знает. И после выхода из функции сборщик мусора чистит твою измененную строку. string - ссылочный тип, просто неизменяемый. Читай clr via c#. |
|||
|
||||
BinaryShadow |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 10.3.2004 Репутация: 1 Всего: 1 |
В C# есть передача параметров по ссылке, для инициализированных ref, для не инициализированных out.
|
|||
|
||||
IGV |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 1.4.2008 Репутация: 1 Всего: 2 |
DragonFire,
Это не совсем так. Я бы хотел немного пояснить про string и пример от KuMa1104, просто сам долго этого не понимал
String является обычным ссылочным типом, как и все остальные. В случае, когда вы пишите
Компилятор помещает литеральную строку "Начальная строка" в метаданные сборки. А потом просто ссылается на эту строку. Когда вы передаете string в метод, то реально в метод передается копия ссылки. И присваивая переменной новую литеральную строку вы изменяете новую ссылку. Поэтому ничего и не изменяется. |
||||
|
|||||
KuMa1104 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: нет Всего: 3 |
Вау Гаспода спасибо всем! За такое и плюсика не жалко)
Всё это хорошо происнило мои мозг. Если кто то ещё хочет добавить что то что щитает интересным , то пожалуста не стесняйтесь) -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |