Is taking advantage of optional parameter edge cases to force implementations of ToString via an interface abuse of the language?
It sounds like you're using an interface where you should be using an abstract class. The class below explicitly requires descendants to have implemented ToString
.
abstract class X
{
public abstract override string ToString();
}