Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> фигня с передачей параметров в метод 
:(
    Опции темы
4YBAK
Дата 10.3.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2006

Репутация: нет
Всего: нет



Проблема в том, что метод с какого-то х*на в результате своей работы меняет исходные значения в матрице RG. Хотя значение в него передается бай валуе, и исходная матрица меняться не должна.

Код

Z=Metod(RG,P,5); // вызов метода Metod
//
//
//
public  double[]  Metod(double[,] RG,double[] P,int n) //Это сам метод, принимающий матрицу дабл, массив дабл, и число инт. Возвращает он массив дабл.
{}


Т.е. работает так, как если б я написал
Код

Z=Metod(ref RG,P,5);  
public  double[]  Metod(ref double[,] RG,double[] P,int n)


PM MAIL   Вверх
Ch0bits
Дата 10.3.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



Исходники давай. smile
PM WWW   Вверх
mr.DUDA
Дата 10.3.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(4YBAK @ 10.3.2006, 18:50 Найти цитируемый пост)
Хотя значение в него передается бай валуе, и исходная матрица меняться не должна.

Почему "by value" ? Аргументы, являющиеся ссылочными типами, ВСЕГДА передаются по ссылке (даже если не указан модификатор ref). А массив - это ссылочный тип.


--------------------
user posted image
PM MAIL WWW   Вверх
4YBAK
Дата 11.3.2006, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2006

Репутация: нет
Всего: нет



Цитата(mr.DUDA @ 10.3.2006, 23:10 Найти цитируемый пост)
Аргументы, являющиеся ссылочными типами, ВСЕГДА передаются по ссылке (даже если не указан модификатор ref)


Мега полезный форум!!! Стоко нового узнаю!
Дак как же мне передать массив не по ссылке, а по значению... Чтоб исходную матрицу не затереть?
Не, можно конечно городить огород, типа просто завести еще матрицу RGSAVE, и зафигарить в нее значения из матрицы RG. RG затрется, RGSAVE останется. Но может есть способ проще?

Кстати, не решится ли проблема, если поменять переменную RG в методе Metod на какую-нить другую?
Т.е. заменить
public double[] Metod(double[,] RG,double[] P,int n)
на
public double[] Metod(double[,] RG1,double[] P,int n)






PM MAIL   Вверх
Exception
Дата 11.3.2006, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



А какие проблемы-то smile ? Просто работай с копией. По поводу второго вопроса - бред, от названия ничего не зависит.
PM   Вверх
Illuminaty
Дата 11.3.2006, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 1
Всего: 56



Вызывай так:
Код

Z = Metod((double[,])RG.Clone(), (double[])P.Clone(), 5)

Удачи!
PM MAIL ICQ   Вверх
4YBAK
Дата 11.3.2006, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2006

Репутация: нет
Всего: нет



Цитата(Illuminaty @ 11.3.2006, 00:40 Найти цитируемый пост)
Вызывай так:
Z = Metod((double[,])RG.Clone(), (double[])P.Clone(), 5)
Удачи!

Супер! Благодарю! Вот такого ответа я и ждал smile


PM MAIL   Вверх
Exception
Дата 11.3.2006, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



А ты как думал smile ? При присваиваний одного ссылочного объекта другому присваивается ссылка. То есть при изменении одного меняется и другой. Если тебе необходимо получить именно копию, надо воспользоваться методом Clone (если реализован интерфейс ICloneable) или MemberwiseClone (это уж совсем извращение, копирует поля объекта).
PM   Вверх
4YBAK
Дата 11.3.2006, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2006

Репутация: нет
Всего: нет



Цитата(Exception @ 11.3.2006, 02:16 Найти цитируемый пост)
Если тебе необходимо получить именно копию, надо воспользоваться методом Clone (если реализован интерфейс ICloneable)


У меня ниче нигде не реализовано, а код Z = Metod((double[,])RG.Clone(), (double[])P.Clone(), 5) работает smile
Или ICloneable по умолчанию реализуется? smile

PM MAIL   Вверх
Exception
Дата 11.3.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Не ты его должен реализовывать, а объект, который тебе хочется скопировать. То есть в данном случае массив реализует ICloneable. Советую всё-таки прежде чем начинать что-то писать, почитать хорошую литературу (например, Троелсена).
PM   Вверх
4YBAK
Дата 11.3.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.1.2006

Репутация: нет
Всего: нет



Цитата(Exception @ 11.3.2006, 11:51 Найти цитируемый пост)
Советую всё-таки прежде чем начинать что-то писать, почитать хорошую литературу (например, Троелсена).


Уже давно прочитал smile
Ниче из того, что он писал про интерфейсы, я не понял smile
Уж очень фсе про них теоретически....


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1084 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.