Interfaces are similar to abstract classes in that they cannot be instantiated but can be inherited. Interfaces define methods that classes implementing the interface must define, without specifying how those methods are implemented. This allows for polymorphism through multiple inheritance. Delegates allow functions to be passed as arguments and stored in variables by storing the function's memory address. Delegates can invoke single methods as single-cast delegates or multiple methods as multi-cast delegates.