Delegates in C# are type-safe function pointers that reference methods and allow methods to be passed as parameters. They can be instantiated, invoke designated functions, and support multicast capabilities for calling multiple methods sequentially. Delegates enhance code reusability and encapsulation by abstracting method references and enabling dynamic method invocation.