Abstract class — can have implementation. Interface — only contract (until C# 8).
Abstract class:
1public abstract class Animal {2 public string Name { get; set; }34 // Implemented method5 public void Eat() {6 Console.WriteLine("Eating...");7 }89 // Abstract method10 public abstract void MakeSound();11}
Interface:
1public interface IAnimal {2 string Name { get; set; }3 void MakeSound();4}
C# 8.0+ interface changes: