Delegates in C# are type-safe function pointers that allow methods to be passed as parameters. They are used to define callback methods and implement event handling. Delegates can point to both static and instance methods, enabling flexibility and decoupling of methods from the objects that call them.