К концу прошлого века сложилось четкое представление о том, что необходимы кардинальные перемены самих принципов разработки ПО. Прежде всего, требуется создать принципиально новую основу для прозрачной интеграции написанных на разных языках приложений, а также новый язык, способный впитать в себя все самые эффективные возможности существующих языков программирования и к тому же обеспечивать потребности данного базиса.
Естественно, что эта интеграция должна отлично работать с объектно-ориентированными языками, которые стали стандартом для разработки большинства современного ПО, поскольку технология объектно-ориентированного программирования позволяет существенно увеличить объем повторно используемого кода, сократив сроки разработки и повысив качество создаваемых программ. В этой технологии главным является объект (компонент), независимый от остальной части программы. Это самодостаточный ее фрагмент, решающий некоторую функциональную задачу. К тому же указанная интеграция должна предоставлять разработчикам также новый, структурированный по принципам ООП программный интерфейс самой системы.
Разработка непосредственно нового языка, языка C# была поручена Андерсу Хейльсбергу, ведущему специалисту по программированию, которому мир обязан появлением системы Turbo Pascal, и впоследствии прославившемуся своим вкладом в Delphi.
Приступив к делу, хорошо представляющий сложившуюся ситуацию Андерс Хейльсберг понял, что новый язык не нужно разрабатывать с «нуля». Новый язык унаследует синтаксис языка С, а его объектная модель – это развитая и усовершенствованная модель C++. Все это вместе взятое позволит сэкономить время и силы разработчиков, которые с успехом можно использовать для выработки новых концепций системы.
Учитывая, что C++ и Java (ближайшие потомки языка С) – это те языки, которые хорошо знали, любили и успешно использовали современные программисты во всем мире, следовало предположить, что новому языку несложно будет завоевать симпатии программистов, облегчив намного для них переход к будущей перспективной системе.
Так какие же проблемы призваны были разрешить новая платформа и новый язык? Прежде всего, это вопросы переносимости кода из одной среды в другую, обострившиеся с широким распространением Интернета, к которому подключены компьютеры различных архитектур и проблемы совместной работы программ, написанных на разных языках для создания больших распределенных программных систем.
Следует отметить, что если к моменту разработки языка С# вопросы межплатформенной переносимости в основном были решены в языке Java, то возможности многоязыкового взаимодействия и прямой поддержки самой распространенной операционной системы Windows в новом языке предстояло реализовать впервые.