public void FooCouldBeBase(Derived foo) { foo.Foo(); }
public void BarAndFooCouldBeGeneralized(Derived foo, DerivedDerived bar) { bar.Bar(42, "hash"); foo.Foo(); }
public void BarAsGeneralizedArgument(string hash, Derived dbar) { dbar.Foo(); //if bar wasn't used as a Derived argument below it would be eligible DerivedBarCouldNotBeGeneralized(dbar); }