Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Ссылка на размерный тип?


Автор: Elfet 25.6.2007, 17:26
У меня есть класс, который хранит массив векторов (1).
У класса есть функция которая должна возвращать массив других классов (2), которые должны состоять их трех векторов массива (1)
На C++ я бы просто сделал поля другого класса ссылками и ссылался на нужные мне вектора массива (1)
А как такое в C# реализовать? Вектора же у нас только размерные, а не ссылочные. 

Надеюсь понятно описал. Заранее спасибо smile

PS У меня есть массив вектором: Vector[] - это ссылоный тип (?) а мне нужно что бы это был значимый чтобы передать его в функцию: 
Код

void MyFunc(Vector[] vector)

Как делать?

Автор: stab 25.6.2007, 17:43
в общем, ничего не ясно  smile одно могу сказать точно в C#: вектор = массив = объект = ссылочный тип. или в слово "вектор" ты какой-то другой смысл вкладываешь?

Добавлено через 1 минуту и 6 секунд
.. приведи код на C++, может так проще будет.

Добавлено через 6 минут и 21 секунду
ааа, вспомнил, у тебя Vector это структура. тебе зачем требуется передавать ссылки на него, а не сами значения?

Автор: Elfet 25.6.2007, 17:52
Не, вектор у меня размерный - я его сам написал smile

Короче что делать если я хочу ссылаться на размерный тип? smile

Код

Vector v[] = new Vector[9];
.....

class My
{
public:
   Vector * v1;
   Vector * v2;
   Vector * v3;
}

...

my.v1 = &v[0];

Автор: stab 25.6.2007, 17:58
либо описать Vector как класс, тогда все проблемы сразу отпадут, либо исппоьзовать unsafe код и работать с указателями. тебе всё таки почему надо именно ссылки? чтобы хранилась ссылка на актуальные данные, а не их копия? или чтобы ускорить работу, не делая лишнее копирование?

Автор: Kvazilol 25.6.2007, 18:29
Цитата(Elfet @ 25.6.2007,  17:52)
Не, вектор у меня размерный - я его сам написал smile

Короче что делать если я хочу ссылаться на размерный тип? smile


по умолчанию в C# значимые типы передаются по значению, а тебе надо передать в функцию ссылочку на вектор. значит нужно написать перед вектором ref


Код


 void MyFunc(ref Vector[] vector) 


Добавлено через 1 минуту и 54 секунды
Цитата(cully @ 25.6.2007,  17:58)
 или чтобы ускорить работу, не делая лишнее копирование?

ну конечно

Автор: Elfet 25.6.2007, 18:31
Ну например если без ссылок делать то изменяя массив этих вектором с помощью одного метода из их класса, то придеться пересоздавать те другие классы. 

Автор: stab 25.6.2007, 18:39
Elfet, либо как-то измени логику работы, либо переконвертируй Vector в класс. указатели - зло, придётся держать массивы в pinned состоянии, что очень плохо.

Автор: Elfet 25.6.2007, 19:02
Будем логику улучшать smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)