Опускаясь до уровня "на пальцах":
Например, можно написать программу на ассемблере (поскольку он платформеннозависимый), ваша программа будет выполняться, например, только на процессорах архитектуры x86. При этом, вам придётся писать эту же программу для другой архитектуры.
Поднимемся выше. Напишем программу на C или С++. Она уже отчасти платформеннонезависима, так как при компиляции на разных архитектурах, та или иная реализация компилятора учитывает особенности платформы и генерирует совместимый машинный код. Но допустим, вам необходимо написать что-то сложнее hello world. Вы ищете подходящий функционал в стандартных библиотеках и, допустим, не находите. Зато вы находите подходящую библиотеку А, но вдруг выясняется, что она использует компоненты сторонней библиотеки Б, которая ...
Ну, в целом, цепочка зависимостей может быть весьма длинной. И вот, ваш проект, ради одной фичи обрастает кучей зависимостей. Более того, вы сталкиваетесь с проблемами лицензирования, так как программный код, который вы гуглите и скачиваете из интернетов, скорее всего распространяется как Open Source, а значит - вы не можете закрывать свой исходный код (всё немного сложнее, но если ваши намерения по распространению своего проекта выходят несколько дальше, чем лабораторная работа по информатике, эти проблемы могут возникнуть).
У вас может возникнуть желание написать свой "велосипед" под себя, но, тем самым, вы тратите время на создание некоего вспомогательного компонента, и вообще, ваша программа не про это.
Теперь перейдём к .Net Framework. Разработчики постарались для вас и написали несколько десятков (или сотен) тысяч классов практически подо все умозрительные задачи, которые могут вам понадобиться, то есть это "кубики лего", позволяющие вам БЫСТРО писать приложения, сосредоточившись на логике вашей программы.
Вам не надо реализовывать свой файловый ввод-вывод, работу с сетью, криптографию, коллекции, работу с базами данных и пр. Всё уже есть, всё пишется в 1-2 строки. Всё готово к употреблению.
Как же этим пользоваться? В объектами фреймворка можно работать на нескольких языках: C#, VB.Net, F# и что там ещё напридумывали, все они взаимодействуют с Common Language Runtime и имеют доступ ко всем классам фреймворка.