Я думаю, что также важно помнить, что mono - это среда выполнения виртуальной машины (JIT-компилятор, сборщик мусора и т. Д.), А также коллекция библиотек классов, работающих на этой платформе (пространство имен System.Linq,парсеры XML и т. д.).
Большинство файлов .cs, которые вы видите, являются частью библиотек классов.В основном это код C #, который выполняется как ваш собственный код C # (за некоторыми исключениями, но в принципе не имеет смысла переизобретать и перераспределять колесо снова и снова, поэтому это «базовые» библиотеки классов C #),Вот почему вы можете загружать сложные монофонические программы, такие как файлы небольшого размера, если монофоническая программа уже установлена на машине.
Для моно JIT, среда выполнения и сборщик мусора в основном написаны на C / C ++, как и следовало ожидать.Если вы когда-нибудь получите ошибку низкого уровня, вы часто будете видеть дампы отладочного инструмента GNU, как в C, только с большим количеством полезной информации.Платформа Mono очень хороша для взятия любого кода C # и преобразования его в код CIL, который может выполняться где угодно, и они используют любой набор инструментов, который лучше всего подходит для обеспечения того, чтобы код выполнялся где угодно (что в данном случае означало время выполнения компилятора C на linux).