One of the more challenging parts of C# programming is knowing when to create an interface and when to use an abstract class when you want to describe functionality but not implementation. The general rule is this: When you can fully describe the concept in terms of “what it does” without needing to specify any “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.