Let's drop some "useless" knowledge here. Interfaces can have private methods. This comes with the C# 8 feature: "Default interface methods".
Default interface methods allow us to define a default implementation for a method in an interface. This is useful when we want to add a new method to an interface, but we don't want to break all the classes that implement that interface. Something like that:
public interface IMyInterface
{
public void MyMethod()
{
// Do something
}
}
public class MyClass : IMyInterface
{
// I don't need to implement MyMethod
}
But when using it, we can't call MyMethod
from MyClass
:
var myClass = new MyClass();
myClass.MyMethod(); // This won't compile
IMyInterface myInterface = myClass;
myInterface.MyMethod(); // This will compile
And to make that mess a bit messier, we can also refactor out things that are private inside the interface:
public interface IMyInterface
{
public void MyMethod()
{
MyPrivateMethod();
}
private void MyPrivateMethod()
{
// Do something
}
}
I am not the biggest fan of this feature, but it's there, and it's good to know about it.