Почему компилятор не позволяет заменять ни внутренние, ни произвольные структуры во время компиляции?Поскольку внутреннее побитовое представление может быть установлено во время компиляции (в обоих случаях), нет очевидных причин для ограничения.
Все не реализованные функции не реализованы по той же причине.Для реализации необходимо продумать функцию, оценить ее как соответствующую, спроектированную, указанную, внедренную, протестированную, задокументированную и поставленную.Все эти вещи должны произойти.Для предложенной вами функции ни один из них не произошел.Следовательно, нет возможности.
Разработчики языка программирования не обязаны предоставлять обоснование того, почему функция не была реализована.Скорее, люди, которым нужна эта функция, должны указать причину, по которой разработчики языка программирования должны тратить свое драгоценное время на реализацию нужной вам функции.
Процесс проектирования на C # открыт, и доступен исходный код компилятора. Почему вы не разработали и не внедрили эту функцию? Если для вас было бы справедливо задать этот вопрос дизайнерам, то для них было бы справедливо задать его вам!Вы программист;Займитесь программированием компьютеров и создайте эту функцию, если считаете, что она того стоит, а затем убедите языковую команду принять ваш запрос на выборку.Если вы не думаете, что это стоит вашего времени, то, вероятно, дизайнеры языка чувствуют то же самое.
Мой вопрос: есть ли способ жестко закодировать предопределенный наборбайтов в c #, которые могут быть интерпретированы во время компиляции как соответствующий тип, так как все структуры имеют предопределенный контур памяти.
Я не уверен, что вы подразумеваете под "во время компиляции";Вы можете уточнить?
Есть способы хранения байтовых массивов в сборке, конечно.Создайте программу на C # с байтовым массивом, инициализированным для всех постоянных значений, и ildasm сборки;вы увидите код, сгенерированный компилятором C # для получения изображения байтового массива из метаданных и в массив.
Вы можете реализовать аналогичные махинации для получения байтового массива, исправить массив на месте изатем используйте небезопасную магию указателя, чтобы переосмыслить байты массива как байты структуры.Это звучит чрезвычайно опасно и может испортить работу сборщика мусора.Я бы не хотел этого делать сам, но вы, кажется, довольно заинтересованы в этой функции, поэтому воспользуйтесь ей и сообщите о том, что вы узнали!
В качестве альтернативы, C ++ / CLI, вероятно, реализует нужную вам функцию;Я никогда не использовал его, но это похоже на то, что он будет делать.Вы можете написать небольшую программу на C ++ / CLI, которая будет делать то, что вы хотите, и затем либо (1) использовать сборку этой программы как зависимость вашей сборки, (2) скомпилировать ее как сетевой модуль, связать ее с вашей сборкой через обычныйМеханизм связывания сетевого модуля (гадость) или (3) определяют, как они реализовали эту функцию, а затем делают то же самое.