public void IfIsATest() { Base s1 = new Sub1(); Base s2 = new Sub2(); Base s3 = new Sub3(); s1.IfIsA((Sub1 s) => { s.Value = 2; }); Assert.AreEqual(2, ((Sub1)s1).Value); s2.IfIsA((Sub1 s) => { s.Value = 3; }); Assert.AreEqual(42, ((Sub2)s2).Value); Assert.AreEqual(2, s1.IfIsA((Sub1 s) => s.Value)); Assert.AreEqual(0, s1.IfIsA((Sub2 s) => s.Value)); Assert.AreEqual(2, s1.IfIsA((Sub1 s) => s.Value, (Sub2 s) => s.Value)); Assert.AreEqual(42, s2.IfIsA((Sub1 s) => s.Value, (Sub2 s) => s.Value)); Assert.AreEqual(0, s3.IfIsA((Sub1 s) => s.Value, (Sub2 s) => s.Value)); }