public void VirtualCallTest() { Soldier s0 = new Soldier(); s0.Rank = Rank.Captain; s0.Kill(); Assert.That(s0.Rank, Is.EqualTo(Rank.General)); Assert.That(s0.IsAlive, Is.EqualTo(false)); Soldier s1 = new Soldier(); s1.Rank = Rank.Captain; s1.SoldierPrototype.Kill = delegate { }; s1.Kill(); Assert.That(s1.Rank, Is.EqualTo(Rank.Captain)); Assert.That(s1.IsAlive, Is.EqualTo(true)); Soldier s2 = new Soldier(); s2.Rank = Rank.Captain; s2.SoldierPrototype.Kill = self => (self as Person).xKill(); s2.Kill(); Assert.That(s2.Rank, Is.EqualTo(Rank.Captain)); Assert.That(s2.IsAlive, Is.EqualTo(false)); }