/* A Programmer's Introduction to C# (Second Edition) by Eric Gunnerson Publisher: Apress L.P. ISBN: 1-893115-62-3 */ // 01 - Object-Oriented BasicsPolymorphism and Virtual Functions // copyright 2000 Eric Gunnerson using System; public PolymorphismVirtualFunctions { public static void CallPlay(MusicServer ms) { ms.Play(); } public static void Main() { MusicServer ms = new WinAmpServer(); CallPlay(ms); ms = new MediaServer(); CallPlay(ms); } } public abstract class MusicServer { public abstract void Play(); } public class WinAmpServer: MusicServer { public override void Play() { Console.WriteLine("WinAmpServer.Play()"); } } public class MediaServer: MusicServer { public override void Play() { Console.WriteLine("MediaServer.Play()"); } }
Class Interface
Method override 3
/* Learning C# by Jesse Liberty Publisher: O'Reilly ISBN: 0596003765 */ using System; class Dog { private int weight; // constructor public Dog(int weight) { this.weight = weight; } // override Object.ToString public override string ToString() { return weight.ToString(); } } public class TesterOverride { static void Main() { int i = 5; Console.WriteLine("The value of i is: {0}", i.ToString()); Dog milo = new Dog(62); Console.WriteLine("My dog Milo weighs {0} pounds", milo.ToString()); } }
Demonstrates the use of a virtual property to override a base class property
/* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794 */ // // VProp.cs -- Demonstrates the use of a virtual method to override // a base class method. // // Compile this program with the following command line: // C:>csc VProp.cs namespace nsVirtual { using System; public class VPropclsMain { static public void Main () { clsBase Base = new clsBase(); clsFirst First = new clsFirst(); Base.SetString ("This should set the base class property"); First.SetString ("This should set the derived class property"); Console.WriteLine(); Console.WriteLine (Base.GetString()); Console.WriteLine (First.GetString()); } } class clsBase { public void SetString (string str) { StrProp = str; } public string GetString () { return (StrProp); } virtual protected string StrProp { get { Console.WriteLine ("Getting Base string"); return (m_BaseString); } set { Console.WriteLine ("Setting Base string"); m_BaseString = value; } } private string m_BaseString = ""; } class clsFirst : clsBase { override protected string StrProp { get { Console.WriteLine ("Getting derived string"); return (m_DerivedString); } set { Console.WriteLine ("Setting derived string"); m_DerivedString = value; } } private string m_DerivedString = ""; } }
Demonstrates the use of a virtual method to override a base class method
/* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794 */ // // Virtual.cs -- Demonstrates the use of a virtual method to override // a base class method. // // Compile this program with the following command line: // C:>csc Virtual.cs namespace nsVirtual { using System; public class VirtualclsMain { static public void Main () { clsBase Base = new clsBase(); clsFirst First = new clsFirst(); clsSecond Second = new clsSecond(); Base.Show(); First.Show(); Second.Show (); } } class clsBase { public void Show () { Describe (); } virtual protected void Describe () { Console.WriteLine ("Called the base class Describe() method"); } } class clsFirst : clsBase { override protected void Describe () { Console.WriteLine ("Called the derived class Describe() method"); } } class clsSecond : clsBase { } }
illustrates polymorphism
/* Mastering Visual C# .NET by Jason Price, Mike Gunderloy Publisher: Sybex; ISBN: 0782129110 */ /* Example7_2.cs illustrates polymorphism */ using System; // declare the MotorVehicle class class MotorVehicle { // declare the fields public string make; public string model; // define a constructor public MotorVehicle(string make, string model) { this.make = make; this.model = model; } // define the Accelerate() method (may be overridden in a // derived class) public virtual void Accelerate() { Console.WriteLine(model + " accelerating"); } } // declare the Car class (derived from MotorVehicle) class Car : MotorVehicle { // define a constructor public Car(string make, string model) : base(make, model) { // do nothing } // override the base class Accelerate() method public override void Accelerate() { Console.WriteLine("Pushing gas pedal of " + model); base.Accelerate(); // calls the Accelerate() method in the base class } } // declare the Motorcycle class (derived from MotorVehicle) class Motorcycle : MotorVehicle { // define a constructor public Motorcycle(string make, string model) : base(make, model) { // do nothing } // override the base class Accelerate() method public override void Accelerate() { Console.WriteLine("Twisting throttle of " + model); base.Accelerate(); // calls the Accelerate() method in the base class } } public class Example7_2 { public static void Main() { // create a Car object and call the object's Accelerate() method Car myCar = new Car("Toyota", "MR2"); myCar.Accelerate(); // create a Motorcycle object and call the object's Accelerate() method Motorcycle myMotorcycle = new Motorcycle("Harley-Davidson", "V-Rod"); myMotorcycle.Accelerate(); } }
When a virtual method is not overridden, the base class method is used
/* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ /* When a virtual method is not overridden, the base class method is used. */ using System; class Base { // Create virtual method in the base class. public virtual void who() { Console.WriteLine("who() in Base"); } } class Derived1 : Base { // Override who() in a derived class. public override void who() { Console.WriteLine("who() in Derived1"); } } class Derived2 : Base { // This class does not override who(). } public class NoOverrideDemo { public static void Main() { Base baseOb = new Base(); Derived1 dOb1 = new Derived1(); Derived2 dOb2 = new Derived2(); Base baseRef; // a base-class reference baseRef = baseOb; baseRef.who(); baseRef = dOb1; baseRef.who(); baseRef = dOb2; baseRef.who(); // calls Base's who() } }
Demonstrate a virtual method
/* C#: The Complete Reference by Herbert Schildt Publisher: Osborne/McGraw-Hill (March 8, 2002) ISBN: 0072134852 */ // Demonstrate a virtual method. using System; class Base { // Create virtual method in the base class. public virtual void who() { Console.WriteLine("who() in Base"); } } class Derived1 : Base { // Override who() in a derived class. public override void who() { Console.WriteLine("who() in Derived1"); } } class Derived2 : Base { // Override who() again in another derived class. public override void who() { Console.WriteLine("who() in Derived2"); } } public class OverrideDemo { public static void Main() { Base baseOb = new Base(); Derived1 dOb1 = new Derived1(); Derived2 dOb2 = new Derived2(); Base baseRef; // a base-class reference baseRef = baseOb; baseRef.who(); baseRef = dOb1; baseRef.who(); baseRef = dOb2; baseRef.who(); } }