An abstract class in C# is defined using the "abstract" keyword. It can contain abstract and non-abstract methods and properties. Abstract classes cannot be instantiated but can be implemented by child classes. Abstract methods in an abstract class are declared using the "abstract" keyword but provide no implementation, while non-abstract methods do provide implementation. Child classes that inherit from an abstract class must override the abstract methods to provide an implementation. Interfaces in C# declare signatures for methods, properties, events and delegates but provide no implementation, which is instead provided by classes that implement the interface.