We can't define fields in an interface but can define fields in an abstract class.
The interface has a signature of methods but an abstract class can contain both types of methods; these have a signature or an implementation.
Interface members are by default public and can't use an access specifier for them but in an abstract class we can define an access specifier for each member.
An interface is slow because it needs to find the actual method in the corresponding classes. But an abstract class is fast.
We can inherit from multiple interfaces for a single class but can't inherit multiple abstract classes.
Here's a quote from "The Complete Reference C# 2.0" by Herbert Schildt that :
"When you can fully describe the concept in terms of "what it does" without needing to specify any of "how it does it", then you should use an interface. If you need to include some implementation details, then you will need to represent your concept in an abstract class."
http://social.msdn.microsoft.com/Forums/en-US/8ad621b8-a915-4d7e-89c3-5dbbc47202fd/whats-the-difference-between-abstract-classes-and-interfaces?forum=csharplanguage[
^]