Możliwe jest zarówno dynamiczne tworzenie kodu wykonywalnego ze źródeł C# jak i tworzenie dynamicznych modułów w języku pośrednim (CIL). bogata biblioteka klas BCL, umożliwiająca rozwijanie aplikacji konsolowych, okienkowych (System.Windows.Forms oraz WPF od .NET Framework 3.0), bazodanowych (ADO.NET), sieciowych (System.Net), w architekturze rozproszonej (WebServices) czy dynamicznych aplikacji internetowych (ASP.NET) oraz dynamiczne treści multimedialne (Silverlight). W C#, podobnie jak w C stosuje się dwa rodzaje komentarzy: // to komentarz jednoliniowy, czyli wszystkiego, co znajduje się za nim, kompilator nie bierze pod uwagę. Komentarz wielowierszowy zaczyna się od /* a kończy */. Kompilator nie bierze pod uwagę tego, co znajduje się pomiędzy. Jeśli komentarz zaczyna się od /// lub /**, to jest to komentarz, w którym umieszcza się dokumentację do kodu.
C# 2.0 Rozszerzenia do języka C# zostały przedstawione przez Microsoft w roku 2005 wraz z prezentacją .NET Framework 2.0 oraz Visual Studio 2005.
Najważniejsze z rozszerzeń to: typy generyczne – typy te rozszerzają język C# o polimorfizm parametryczny.
Kopiec zaimplementowany przy pomocy szablonu klasy: public class Kopiec<T> { private T[] tablica;
// konstruktor public Kopiec(T[] tablica) {...}