Информация об изменениях

Сообщение Re: Начинаю учить C# :( от 13.07.2016 11:11

Изменено 13.07.2016 11:12 Vladek

Здравствуйте, 777777w, Вы писали:

7>И никак не найду гибкость, которая была у C/C++. Или ее там нет?


C# язык более высокого уровня, у него своя атмосфера свои абстракции.

7>Принимаю из сокета пакет двоичных данных имеющих такую структуру:

7>Сразу же сталкиваюсь с тем, что в C# повторить ее нельзя: здесь массивы всегда ссылочного типа. Покопавшись, все-таки нахожу что массив можно сделать fixed. Правда, из-за него одного весь проект приходится делать unsafe.

Э, а этот сокет может вернуть поток данных ([msdn]Stream[msdn])? Открываешь поток, читаешь из него байты и парсишь их в соответствии со своей структурой. Может быть, в .NET есть уже код для этого — какое-нибудь быстрое наложение структуры на массив байт — гуглишь, экспериментируешь.

7>Но главная проблема дальше. Данные принимаются в массив байт. В Си я создавал указатель типа CDataPacket, указывал им на начало массива и работал с ним. Здесь указателей нет, данные ссылочного типа создаются сразу со "своими" данными, а как быть если данные уже существуют отдельно? Ведь ситуация очень распространенная, двоичные файлы тоже читаются в массив байт, как их интерпретировать как структуры неких дынных? Дальше при обработке этой структуры тоже придется преобразовывать типы — поле Data в зависимости от типа устройства и типа информации интерпретируется как другие структуры, как здесь быть?


Копировать. Прочитал массив байт, быстро проанализировал его тип (проверил magic numbers), создал структуру нужного типа — заполнил её данными из массива. Управлению памятью здесь — не твоя забота, оставь это сборщику мусора. Твоя задача писать простой и понятный код, а не накладывать универсальные структуры на произвольные участки памяти.
Re: Начинаю учить C# :(
Здравствуйте, 777777w, Вы писали:

7>И никак не найду гибкость, которая была у C/C++. Или ее там нет?


C# язык более высокого уровня, у него своя атмосфера свои абстракции.

7>Принимаю из сокета пакет двоичных данных имеющих такую структуру:

7>Сразу же сталкиваюсь с тем, что в C# повторить ее нельзя: здесь массивы всегда ссылочного типа. Покопавшись, все-таки нахожу что массив можно сделать fixed. Правда, из-за него одного весь проект приходится делать unsafe.

Э, а этот сокет может вернуть поток данных (Stream)? Открываешь поток, читаешь из него байты и парсишь их в соответствии со своей структурой. Может быть, в .NET есть уже код для этого — какое-нибудь быстрое наложение структуры на массив байт — гуглишь, экспериментируешь.

7>Но главная проблема дальше. Данные принимаются в массив байт. В Си я создавал указатель типа CDataPacket, указывал им на начало массива и работал с ним. Здесь указателей нет, данные ссылочного типа создаются сразу со "своими" данными, а как быть если данные уже существуют отдельно? Ведь ситуация очень распространенная, двоичные файлы тоже читаются в массив байт, как их интерпретировать как структуры неких дынных? Дальше при обработке этой структуры тоже придется преобразовывать типы — поле Data в зависимости от типа устройства и типа информации интерпретируется как другие структуры, как здесь быть?


Копировать. Прочитал массив байт, быстро проанализировал его тип (проверил magic numbers), создал структуру нужного типа — заполнил её данными из массива. Управлению памятью здесь — не твоя забота, оставь это сборщику мусора. Твоя задача писать простой и понятный код, а не накладывать универсальные структуры на произвольные участки памяти.