//C# Redefinition - Invariance, Covariance en Contravariance Static Typing en Dynamic Binding public class Fruit { public virtual void MethodA() { } } public class Apple : Fruit { public virtual void MethodB() { } } public class GrannySmith : Apple { public virtual void MethodC() { } } public class JonaGold : Apple { public virtual void MethodD() { } } public class BaseClass { public virtual void Method1(Apple argument) { } } public class DerivedClass : BaseClass { public override void Method1(Apple argument) { } public override void Method1(Fruit argument) { Console.WriteLine(argument.MethodA()); } } public class ExpectedContraVariance { public static void Main() { GrannySmith grannySmith1 = new GrannySmith(); JonaGold jonaGold1 = new JonaGold(); BaseClass object1 = new DerivedClass(); object1.Method1(grannySmith1); } } public class BaseClass { public virtual void Method2() { Method2 = new Apple(); } } public class DerivedClass : BaseClass { public override void Method2() { Method2 = new Apple(); } public override void Method2() { Method2 = new GrannySmith(); } } public class ExpectedCoVariance { public static void Main() { GrannySmith grannySmith1 = new GrannySmith(); JonaGold jonaGold1 = new JonaGold(); BaseClass object1 = new DerivedClass(); Console.WriteLine(object1.Method2().MethodB()); } } //Bezoek www.vbvoorbeelden.be voor meer C# voorbeelden. //Copyright - De Wolf / vbvoorbeelden - 2003-2011 - Alle rechten voorbehouden.