I run into the following bit of code while doing a code review on a pull request:
This was very strange, because the code appeared to compile properly, but it shouldn’t. I mean, look at it. The generic parameter is not constrained, and I don’t have any extension methods on Object that can apply here, so why would this compile?
The secret was in the base class:
Basically, we specified the constraint on the abstract method, and then inherited it, which was really confusing to me until I figured it out.
You can’t do the same with interfaces, though, although explicit interface implementation does allow it.