<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FClass_Interface%2FOverride_Virtual</id>
		<title>Csharp/C Sharp/Class Interface/Override Virtual - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FClass_Interface%2FOverride_Virtual"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/Override_Virtual&amp;action=history"/>
		<updated>2026-04-29T19:01:03Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/Override_Virtual&amp;diff=596&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/Override_Virtual&amp;diff=596&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:18Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/Override_Virtual&amp;diff=597&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/Override_Virtual&amp;diff=597&amp;oldid=prev"/>
				<updated>2010-05-26T11:39:04Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Class hierarchy: override and virtual==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * C# Programmers Pocket Consultant&lt;br /&gt;
 * Author: Gregory S. MacBeth&lt;br /&gt;
 * Email: gmacbeth@comporium.net&lt;br /&gt;
 * Create Date: June 27, 2003&lt;br /&gt;
 * Last Modified Date:&lt;br /&gt;
 */&lt;br /&gt;
using System;&lt;br /&gt;
namespace Client.Chapter_5___Building_Your_Own_Classes&lt;br /&gt;
{&lt;br /&gt;
  public class MyMainClass13&lt;br /&gt;
  {&lt;br /&gt;
    static void Main(string[] args)&lt;br /&gt;
    {&lt;br /&gt;
      //The function called is based&lt;br /&gt;
      //upon the type called by new.&lt;br /&gt;
      B MyB = new C();&lt;br /&gt;
      MyB.Display();    //Calls C&amp;quot;s Display&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  abstract class A&lt;br /&gt;
  {&lt;br /&gt;
    public abstract void Display();&lt;br /&gt;
  }&lt;br /&gt;
  class B: A&lt;br /&gt;
  {&lt;br /&gt;
    public override void Display()&lt;br /&gt;
    {&lt;br /&gt;
      Console.WriteLine(&amp;quot;Class B&amp;quot;s Display Method&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class C: B&lt;br /&gt;
  {&lt;br /&gt;
    public override void Display()&lt;br /&gt;
    {&lt;br /&gt;
      Console.WriteLine(&amp;quot;Class C&amp;quot;s Display Method&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class D: C&lt;br /&gt;
  {&lt;br /&gt;
    public override void Display()&lt;br /&gt;
    {&lt;br /&gt;
      Console.WriteLine(&amp;quot;Class D&amp;quot;s Display Method&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demonstrate a virtual method==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
C#: The Complete Reference &lt;br /&gt;
by Herbert Schildt &lt;br /&gt;
Publisher: Osborne/McGraw-Hill (March 8, 2002)&lt;br /&gt;
ISBN: 0072134852&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Demonstrate a virtual method. &lt;br /&gt;
 &lt;br /&gt;
using System; &lt;br /&gt;
 &lt;br /&gt;
class Base { &lt;br /&gt;
  // Create virtual method in the base class.  &lt;br /&gt;
  public virtual void who() { &lt;br /&gt;
    Console.WriteLine(&amp;quot;who() in Base&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class Derived1 : Base { &lt;br /&gt;
  // Override who() in a derived class. &lt;br /&gt;
  public override void who() { &lt;br /&gt;
    Console.WriteLine(&amp;quot;who() in Derived1&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class Derived2 : Base { &lt;br /&gt;
  // Override who() again in another derived class. &lt;br /&gt;
  public override void who() { &lt;br /&gt;
    Console.WriteLine(&amp;quot;who() in Derived2&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public class OverrideDemo { &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    Base baseOb = new Base(); &lt;br /&gt;
    Derived1 dOb1 = new Derived1(); &lt;br /&gt;
    Derived2 dOb2 = new Derived2(); &lt;br /&gt;
 &lt;br /&gt;
    Base baseRef; // a base-class reference &lt;br /&gt;
 &lt;br /&gt;
    baseRef = baseOb;  &lt;br /&gt;
    baseRef.who(); &lt;br /&gt;
 &lt;br /&gt;
    baseRef = dOb1;  &lt;br /&gt;
    baseRef.who(); &lt;br /&gt;
 &lt;br /&gt;
    baseRef = dOb2;  &lt;br /&gt;
    baseRef.who(); &lt;br /&gt;
  } &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demonstrates the use of a virtual method to override a base class method==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
C# Programming Tips &amp;amp; Techniques&lt;br /&gt;
by Charles Wright, Kris Jamsa&lt;br /&gt;
Publisher: Osborne/McGraw-Hill (December 28, 2001)&lt;br /&gt;
ISBN: 0072193794&lt;br /&gt;
*/&lt;br /&gt;
//&lt;br /&gt;
// Virtual.cs -- Demonstrates the use of a virtual method to override&lt;br /&gt;
//               a base class method.&lt;br /&gt;
//&lt;br /&gt;
//               Compile this program with the following command line:&lt;br /&gt;
//                   C:&amp;gt;csc Virtual.cs&lt;br /&gt;
namespace nsVirtual&lt;br /&gt;
{&lt;br /&gt;
    using System;&lt;br /&gt;
    &lt;br /&gt;
    public class VirtualclsMain&lt;br /&gt;
    {&lt;br /&gt;
        static public void Main ()&lt;br /&gt;
        {&lt;br /&gt;
            clsBase Base = new clsBase();&lt;br /&gt;
            clsFirst First = new clsFirst();&lt;br /&gt;
            clsSecond Second = new clsSecond();&lt;br /&gt;
            Base.Show();&lt;br /&gt;
            First.Show();&lt;br /&gt;
            Second.Show ();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    class clsBase&lt;br /&gt;
    {&lt;br /&gt;
        public void Show ()&lt;br /&gt;
        {&lt;br /&gt;
            Describe ();&lt;br /&gt;
        }&lt;br /&gt;
        virtual protected void Describe ()&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine (&amp;quot;Called the base class Describe() method&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    class clsFirst : clsBase&lt;br /&gt;
    {&lt;br /&gt;
        override protected void Describe ()&lt;br /&gt;
        {&lt;br /&gt;
            Console.WriteLine (&amp;quot;Called the derived class Describe() method&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    class clsSecond : clsBase&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demonstrates the use of a virtual property to override a base class property==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
C# Programming Tips &amp;amp; Techniques&lt;br /&gt;
by Charles Wright, Kris Jamsa&lt;br /&gt;
Publisher: Osborne/McGraw-Hill (December 28, 2001)&lt;br /&gt;
ISBN: 0072193794&lt;br /&gt;
*/&lt;br /&gt;
//&lt;br /&gt;
// VProp.cs -- Demonstrates the use of a virtual method to override&lt;br /&gt;
//             a base class method.&lt;br /&gt;
//&lt;br /&gt;
//             Compile this program with the following command line:&lt;br /&gt;
//                 C:&amp;gt;csc VProp.cs&lt;br /&gt;
namespace nsVirtual&lt;br /&gt;
{&lt;br /&gt;
    using System;&lt;br /&gt;
    &lt;br /&gt;
    public class VPropclsMain&lt;br /&gt;
    {&lt;br /&gt;
        static public void Main ()&lt;br /&gt;
        {&lt;br /&gt;
            clsBase Base = new clsBase();&lt;br /&gt;
            clsFirst First = new clsFirst();&lt;br /&gt;
            Base.SetString (&amp;quot;This should set the base class property&amp;quot;);&lt;br /&gt;
            First.SetString (&amp;quot;This should set the derived class property&amp;quot;);&lt;br /&gt;
            Console.WriteLine();&lt;br /&gt;
            Console.WriteLine (Base.GetString());&lt;br /&gt;
            Console.WriteLine (First.GetString());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    class clsBase&lt;br /&gt;
    {&lt;br /&gt;
  public void SetString (string str)&lt;br /&gt;
        {&lt;br /&gt;
            StrProp = str;&lt;br /&gt;
        }&lt;br /&gt;
        public string GetString ()&lt;br /&gt;
        {&lt;br /&gt;
            return (StrProp);&lt;br /&gt;
        }&lt;br /&gt;
        virtual protected string StrProp&lt;br /&gt;
        {&lt;br /&gt;
            get&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine (&amp;quot;Getting Base string&amp;quot;);&lt;br /&gt;
                return (m_BaseString);&lt;br /&gt;
            }&lt;br /&gt;
            set&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine (&amp;quot;Setting Base string&amp;quot;);&lt;br /&gt;
                m_BaseString = value;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        private string m_BaseString = &amp;quot;&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    class clsFirst : clsBase&lt;br /&gt;
    {&lt;br /&gt;
        override protected string StrProp&lt;br /&gt;
        {&lt;br /&gt;
            get&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine (&amp;quot;Getting derived string&amp;quot;);&lt;br /&gt;
                return (m_DerivedString);&lt;br /&gt;
            }&lt;br /&gt;
            set&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine (&amp;quot;Setting derived string&amp;quot;);&lt;br /&gt;
                m_DerivedString = value;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        private string m_DerivedString = &amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==illustrates polymorphism==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Mastering Visual C# .NET&lt;br /&gt;
by Jason Price, Mike Gunderloy&lt;br /&gt;
Publisher: Sybex;&lt;br /&gt;
ISBN: 0782129110&lt;br /&gt;
*/&lt;br /&gt;
/*&lt;br /&gt;
  Example7_2.cs illustrates polymorphism&lt;br /&gt;
*/&lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
// declare the MotorVehicle class&lt;br /&gt;
class MotorVehicle&lt;br /&gt;
{&lt;br /&gt;
  // declare the fields&lt;br /&gt;
  public string make;&lt;br /&gt;
  public string model;&lt;br /&gt;
  // define a constructor&lt;br /&gt;
  public MotorVehicle(string make, string model)&lt;br /&gt;
  {&lt;br /&gt;
    this.make = make;&lt;br /&gt;
    this.model = model;&lt;br /&gt;
  }&lt;br /&gt;
  // define the Accelerate() method (may be overridden in a&lt;br /&gt;
  // derived class)&lt;br /&gt;
  public virtual void Accelerate()&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(model + &amp;quot; accelerating&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// declare the Car class (derived from MotorVehicle)&lt;br /&gt;
class Car : MotorVehicle&lt;br /&gt;
{&lt;br /&gt;
  // define a constructor&lt;br /&gt;
  public Car(string make, string model) :&lt;br /&gt;
  base(make, model)&lt;br /&gt;
  {&lt;br /&gt;
    // do nothing&lt;br /&gt;
  }&lt;br /&gt;
  // override the base class Accelerate() method&lt;br /&gt;
  public override void Accelerate()&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(&amp;quot;Pushing gas pedal of &amp;quot; + model);&lt;br /&gt;
    base.Accelerate();  // calls the Accelerate() method in the base class&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// declare the Motorcycle class (derived from MotorVehicle)&lt;br /&gt;
class Motorcycle : MotorVehicle&lt;br /&gt;
{&lt;br /&gt;
  // define a constructor&lt;br /&gt;
  public Motorcycle(string make, string model) :&lt;br /&gt;
  base(make, model)&lt;br /&gt;
  {&lt;br /&gt;
    // do nothing&lt;br /&gt;
  }&lt;br /&gt;
  // override the base class Accelerate() method&lt;br /&gt;
  public override void Accelerate()&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(&amp;quot;Twisting throttle of &amp;quot; + model);&lt;br /&gt;
    base.Accelerate();  // calls the Accelerate() method in the base class&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class Example7_2&lt;br /&gt;
{&lt;br /&gt;
  public static void Main()&lt;br /&gt;
  {&lt;br /&gt;
    // create a Car object and call the object&amp;quot;s Accelerate() method&lt;br /&gt;
    Car myCar = new Car(&amp;quot;Toyota&amp;quot;, &amp;quot;MR2&amp;quot;);&lt;br /&gt;
    myCar.Accelerate();&lt;br /&gt;
    // create a Motorcycle object and call the object&amp;quot;s Accelerate() method&lt;br /&gt;
    Motorcycle myMotorcycle = new Motorcycle(&amp;quot;Harley-Davidson&amp;quot;, &amp;quot;V-Rod&amp;quot;);&lt;br /&gt;
    myMotorcycle.Accelerate();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Method override 3==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Learning C# &lt;br /&gt;
by Jesse Liberty&lt;br /&gt;
Publisher: O&amp;quot;Reilly &lt;br /&gt;
ISBN: 0596003765&lt;br /&gt;
*/&lt;br /&gt;
 using System;&lt;br /&gt;
 class Dog&lt;br /&gt;
 {&lt;br /&gt;
     private int weight;&lt;br /&gt;
     // constructor&lt;br /&gt;
     public Dog(int weight)&lt;br /&gt;
     {&lt;br /&gt;
         this.weight = weight;&lt;br /&gt;
     }&lt;br /&gt;
     // override Object.ToString&lt;br /&gt;
     public override string ToString()&lt;br /&gt;
     {&lt;br /&gt;
         return weight.ToString();&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 public class TesterOverride&lt;br /&gt;
 {&lt;br /&gt;
     static void Main()&lt;br /&gt;
     {&lt;br /&gt;
         int i = 5;&lt;br /&gt;
         Console.WriteLine(&amp;quot;The value of i is: {0}&amp;quot;, i.ToString());&lt;br /&gt;
         Dog milo = new Dog(62);&lt;br /&gt;
         Console.WriteLine(&amp;quot;My dog Milo weighs {0} pounds&amp;quot;, milo.ToString());&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Polymorphism==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
using System;&lt;br /&gt;
public class MotorVehicle {&lt;br /&gt;
    public string make;&lt;br /&gt;
    public string model;&lt;br /&gt;
    public MotorVehicle(string make, string model) {&lt;br /&gt;
        this.make = make;&lt;br /&gt;
        this.model = model;&lt;br /&gt;
    }&lt;br /&gt;
    public virtual void Accelerate() {&lt;br /&gt;
        Console.WriteLine(model + &amp;quot; accelerating&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class Product : MotorVehicle {&lt;br /&gt;
    public Product(string make, string model) :&lt;br /&gt;
        base(make, model) {&lt;br /&gt;
    }&lt;br /&gt;
    public override void Accelerate() {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Pushing gas pedal of &amp;quot; + model);&lt;br /&gt;
        base.Accelerate();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class Motorcycle : MotorVehicle {&lt;br /&gt;
    public Motorcycle(string make, string model) :&lt;br /&gt;
        base(make, model) {&lt;br /&gt;
        // do nothing&lt;br /&gt;
    }&lt;br /&gt;
    public override void Accelerate() {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Twisting throttle of &amp;quot; + model);&lt;br /&gt;
        base.Accelerate();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class MainClass {&lt;br /&gt;
    public static void Main() {&lt;br /&gt;
        Product myProduct = new Product(&amp;quot;Toyota&amp;quot;, &amp;quot;MR2&amp;quot;);&lt;br /&gt;
        myProduct.Accelerate();&lt;br /&gt;
        Motorcycle myMotorcycle =&lt;br /&gt;
          new Motorcycle(&amp;quot;Harley-Davidson&amp;quot;, &amp;quot;V-Rod&amp;quot;);&lt;br /&gt;
        myMotorcycle.Accelerate();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Test Polymorphism Virtual Functions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
A Programmer&amp;quot;s Introduction to C# (Second Edition)&lt;br /&gt;
by Eric Gunnerson&lt;br /&gt;
Publisher: Apress  L.P.&lt;br /&gt;
ISBN: 1-893115-62-3&lt;br /&gt;
*/&lt;br /&gt;
// 01 - Object-Oriented Basics\Polymorphism and Virtual Functions&lt;br /&gt;
// copyright 2000 Eric Gunnerson&lt;br /&gt;
using System;&lt;br /&gt;
public PolymorphismVirtualFunctions&lt;br /&gt;
{&lt;br /&gt;
    public static void CallPlay(MusicServer ms)&lt;br /&gt;
    {&lt;br /&gt;
        ms.Play();&lt;br /&gt;
    }&lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        MusicServer ms = new WinAmpServer();&lt;br /&gt;
        CallPlay(ms);&lt;br /&gt;
        ms = new MediaServer();&lt;br /&gt;
        CallPlay(ms);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public abstract class MusicServer&lt;br /&gt;
{&lt;br /&gt;
    public abstract void Play();&lt;br /&gt;
}&lt;br /&gt;
public class WinAmpServer: MusicServer&lt;br /&gt;
{&lt;br /&gt;
    public override void Play() &lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;WinAmpServer.Play()&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class MediaServer: MusicServer&lt;br /&gt;
{&lt;br /&gt;
    public override void Play() &lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;MediaServer.Play()&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Use virtual methods and polymorphism==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
C#: The Complete Reference &lt;br /&gt;
by Herbert Schildt &lt;br /&gt;
Publisher: Osborne/McGraw-Hill (March 8, 2002)&lt;br /&gt;
ISBN: 0072134852&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Use virtual methods and polymorphism. &lt;br /&gt;
 &lt;br /&gt;
using System; &lt;br /&gt;
 &lt;br /&gt;
class TwoDShape {  &lt;br /&gt;
  double pri_width;  // private &lt;br /&gt;
  double pri_height; // private &lt;br /&gt;
  string pri_name;   // private &lt;br /&gt;
  &lt;br /&gt;
  // A default constructor.  &lt;br /&gt;
  public TwoDShape() {  &lt;br /&gt;
    width = height = 0.0;  &lt;br /&gt;
    name = &amp;quot;null&amp;quot;;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // Parameterized constructor.  &lt;br /&gt;
  public TwoDShape(double w, double h, string n) {  &lt;br /&gt;
    width = w;  &lt;br /&gt;
    height = h;  &lt;br /&gt;
    name = n;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // Construct object with equal width and height.  &lt;br /&gt;
  public TwoDShape(double x, string n) {  &lt;br /&gt;
    width = height = x;  &lt;br /&gt;
    name = n;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // Construct an object from an object.  &lt;br /&gt;
  public TwoDShape(TwoDShape ob) {  &lt;br /&gt;
    width = ob.width;  &lt;br /&gt;
    height = ob.height;  &lt;br /&gt;
    name = ob.name;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // Properties for width, height, and name &lt;br /&gt;
  public double width { &lt;br /&gt;
    get { return pri_width; } &lt;br /&gt;
    set { pri_width = value; } &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public double height { &lt;br /&gt;
    get { return pri_height; } &lt;br /&gt;
    set { pri_height = value; } &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public string name { &lt;br /&gt;
    get { return pri_name; } &lt;br /&gt;
    set { pri_name = value; } &lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  public void showDim() {  &lt;br /&gt;
    Console.WriteLine(&amp;quot;Width and height are &amp;quot; +  &lt;br /&gt;
                       width + &amp;quot; and &amp;quot; + height);  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public virtual double area() {   &lt;br /&gt;
    Console.WriteLine(&amp;quot;area() must be overridden&amp;quot;);  &lt;br /&gt;
    return 0.0;  &lt;br /&gt;
  }   &lt;br /&gt;
}  &lt;br /&gt;
  &lt;br /&gt;
// A derived class of TwoDShape for triangles. &lt;br /&gt;
class Triangle : TwoDShape {  &lt;br /&gt;
  string style; // private &lt;br /&gt;
    &lt;br /&gt;
  // A default constructor.  &lt;br /&gt;
  public Triangle() {  &lt;br /&gt;
    style = &amp;quot;null&amp;quot;;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // Constructor for Triangle.  &lt;br /&gt;
  public Triangle(string s, double w, double h) : &lt;br /&gt;
    base(w, h, &amp;quot;triangle&amp;quot;) {  &lt;br /&gt;
      style = s;   &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // Construct an isosceles triangle.  &lt;br /&gt;
  public Triangle(double x) : base(x, &amp;quot;triangle&amp;quot;) {  &lt;br /&gt;
    style = &amp;quot;isosceles&amp;quot;;   &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // Construct an object from an object.  &lt;br /&gt;
  public Triangle(Triangle ob) : base(ob) {  &lt;br /&gt;
    style = ob.style;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // Override area() for Triangle. &lt;br /&gt;
  public override double area() {  &lt;br /&gt;
    return width * height / 2;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // Display a triangle&amp;quot;s style. &lt;br /&gt;
  public void showStyle() {  &lt;br /&gt;
    Console.WriteLine(&amp;quot;Triangle is &amp;quot; + style);  &lt;br /&gt;
  }  &lt;br /&gt;
}  &lt;br /&gt;
  &lt;br /&gt;
// A derived class of TwoDShape for rectangles.   &lt;br /&gt;
class Rectangle : TwoDShape {   &lt;br /&gt;
  // Constructor for Rectangle.  &lt;br /&gt;
  public Rectangle(double w, double h) :  &lt;br /&gt;
    base(w, h, &amp;quot;rectangle&amp;quot;){ }  &lt;br /&gt;
  &lt;br /&gt;
  // Construct a square.  &lt;br /&gt;
  public Rectangle(double x) :  &lt;br /&gt;
    base(x, &amp;quot;rectangle&amp;quot;) { }  &lt;br /&gt;
  &lt;br /&gt;
  // Construct an object from an object.  &lt;br /&gt;
  public Rectangle(Rectangle ob) : base(ob) { }  &lt;br /&gt;
  &lt;br /&gt;
  // Return true if the rectangle is square. &lt;br /&gt;
  public bool isSquare() {   &lt;br /&gt;
    if(width == height) return true;   &lt;br /&gt;
    return false;   &lt;br /&gt;
  }   &lt;br /&gt;
     &lt;br /&gt;
  // Override area() for Rectangle. &lt;br /&gt;
  public override double area() {   &lt;br /&gt;
    return width * height;   &lt;br /&gt;
  }   &lt;br /&gt;
}  &lt;br /&gt;
  &lt;br /&gt;
public class DynShapes {  &lt;br /&gt;
  public static void Main() {  &lt;br /&gt;
    TwoDShape[] shapes = new TwoDShape[5];  &lt;br /&gt;
  &lt;br /&gt;
    shapes[0] = new Triangle(&amp;quot;right&amp;quot;, 8.0, 12.0);  &lt;br /&gt;
    shapes[1] = new Rectangle(10);  &lt;br /&gt;
    shapes[2] = new Rectangle(10, 4);  &lt;br /&gt;
    shapes[3] = new Triangle(7.0);  &lt;br /&gt;
    shapes[4] = new TwoDShape(10, 20, &amp;quot;generic&amp;quot;); &lt;br /&gt;
  &lt;br /&gt;
    for(int i=0; i &amp;lt; shapes.Length; i++) {  &lt;br /&gt;
      Console.WriteLine(&amp;quot;object is &amp;quot; + shapes[i].name);  &lt;br /&gt;
      Console.WriteLine(&amp;quot;Area is &amp;quot; + shapes[i].area());  &lt;br /&gt;
  &lt;br /&gt;
      Console.WriteLine();    &lt;br /&gt;
    }  &lt;br /&gt;
  }  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Virtual and overload==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * C# Programmers Pocket Consultant&lt;br /&gt;
 * Author: Gregory S. MacBeth&lt;br /&gt;
 * Email: gmacbeth@comporium.net&lt;br /&gt;
 * Create Date: June 27, 2003&lt;br /&gt;
 * Last Modified Date:&lt;br /&gt;
 */&lt;br /&gt;
using System;&lt;br /&gt;
namespace Client.Chapter_5___Building_Your_Own_Classes&lt;br /&gt;
{&lt;br /&gt;
  public class MyMainClass12 {&lt;br /&gt;
    static void Main(string[] args)&lt;br /&gt;
    {&lt;br /&gt;
      //The function called is based&lt;br /&gt;
      //upon the type called by new.&lt;br /&gt;
      B MyB = new C();&lt;br /&gt;
      D MyD = new D();&lt;br /&gt;
      MyB.Display();    //Calls C Display&lt;br /&gt;
      MyD.Display();    //Calls D Display&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public interface A&lt;br /&gt;
  {&lt;br /&gt;
    void Display();&lt;br /&gt;
  }&lt;br /&gt;
  class B: A&lt;br /&gt;
  {&lt;br /&gt;
    public virtual void Display()&lt;br /&gt;
    {&lt;br /&gt;
      Console.WriteLine(&amp;quot;Class B&amp;quot;s Display Method&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class C: B&lt;br /&gt;
  {&lt;br /&gt;
    public override void Display()&lt;br /&gt;
    {&lt;br /&gt;
      Console.WriteLine(&amp;quot;Class C&amp;quot;s Display Method&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  class D: C&lt;br /&gt;
  {&lt;br /&gt;
    public override void Display()&lt;br /&gt;
    {&lt;br /&gt;
      Console.WriteLine(&amp;quot;Class D&amp;quot;s Display Method&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Virtual keyword can be used to start a new inheritance ladder==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
public class Class1 {&lt;br /&gt;
    public static void Main(string[] strings) {&lt;br /&gt;
        BankAccount ba = new BankAccount();&lt;br /&gt;
        Test1(ba);&lt;br /&gt;
        SavingsAccount sa = new SavingsAccount();&lt;br /&gt;
        Test1(sa);&lt;br /&gt;
        Test2(sa);&lt;br /&gt;
        SpecialSaleAccount ssa = new SpecialSaleAccount();&lt;br /&gt;
        Test1(ssa);&lt;br /&gt;
        Test2(ssa);&lt;br /&gt;
        Test3(ssa);&lt;br /&gt;
        SaleSpecialCustomer ssc = new SaleSpecialCustomer();&lt;br /&gt;
        Test1(ssc);&lt;br /&gt;
        Test2(ssc);&lt;br /&gt;
        Test3(ssc);&lt;br /&gt;
        Test4(ssc);&lt;br /&gt;
    }&lt;br /&gt;
    public static void Test1(BankAccount account) {&lt;br /&gt;
        Console.Write(&amp;quot;to Test(BankAccount)&amp;quot;);&lt;br /&gt;
        account.Withdrawal(100);&lt;br /&gt;
    }&lt;br /&gt;
    public static void Test2(SavingsAccount account) {&lt;br /&gt;
        Console.Write(&amp;quot;to Test(SavingsAccount)&amp;quot;);&lt;br /&gt;
        account.Withdrawal(100);&lt;br /&gt;
    }&lt;br /&gt;
    public static void Test3(SpecialSaleAccount account) {&lt;br /&gt;
        Console.Write(&amp;quot;to Test(SpecialSaleAccount)&amp;quot;);&lt;br /&gt;
        account.Withdrawal(100);&lt;br /&gt;
    }&lt;br /&gt;
    public static void Test4(SaleSpecialCustomer account) {&lt;br /&gt;
        Console.Write(&amp;quot;to Test(SaleSpecialCustomer)&amp;quot;);&lt;br /&gt;
        account.Withdrawal(100);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class BankAccount {&lt;br /&gt;
    virtual public void Withdrawal(double dWithdrawal) {&lt;br /&gt;
        Console.WriteLine(&amp;quot; invokes BankAccount.Withdrawal()&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class SavingsAccount : BankAccount {&lt;br /&gt;
    override public void Withdrawal(double dWithdrawal) {&lt;br /&gt;
        Console.WriteLine(&amp;quot; invokes SavingsAccount.Withdrawal()&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class SpecialSaleAccount : SavingsAccount {&lt;br /&gt;
    new virtual public void Withdrawal(double dWithdrawal) {&lt;br /&gt;
        Console.WriteLine(&amp;quot; invokes SpecialSaleAccount.Withdrawal()&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class SaleSpecialCustomer : SpecialSaleAccount {&lt;br /&gt;
    override public void Withdrawal(double dWithdrawal) {&lt;br /&gt;
        Console.WriteLine&lt;br /&gt;
          (&amp;quot; invokes SaleSpecialCustomer.Withdrawal()&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==When a virtual method is not overridden,     the base class method is used==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
C#: The Complete Reference &lt;br /&gt;
by Herbert Schildt &lt;br /&gt;
Publisher: Osborne/McGraw-Hill (March 8, 2002)&lt;br /&gt;
ISBN: 0072134852&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
/* When a virtual method is not overridden, &lt;br /&gt;
   the base class method is used. */ &lt;br /&gt;
 &lt;br /&gt;
using System; &lt;br /&gt;
 &lt;br /&gt;
class Base { &lt;br /&gt;
  // Create virtual method in the base class.  &lt;br /&gt;
  public virtual void who() { &lt;br /&gt;
    Console.WriteLine(&amp;quot;who() in Base&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class Derived1 : Base { &lt;br /&gt;
  // Override who() in a derived class. &lt;br /&gt;
  public override void who() { &lt;br /&gt;
    Console.WriteLine(&amp;quot;who() in Derived1&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class Derived2 : Base { &lt;br /&gt;
  // This class does not override who(). &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
public class NoOverrideDemo { &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    Base baseOb = new Base(); &lt;br /&gt;
    Derived1 dOb1 = new Derived1(); &lt;br /&gt;
    Derived2 dOb2 = new Derived2(); &lt;br /&gt;
 &lt;br /&gt;
    Base baseRef; // a base-class reference &lt;br /&gt;
 &lt;br /&gt;
    baseRef = baseOb;  &lt;br /&gt;
    baseRef.who(); &lt;br /&gt;
 &lt;br /&gt;
    baseRef = dOb1;  &lt;br /&gt;
    baseRef.who(); &lt;br /&gt;
 &lt;br /&gt;
    baseRef = dOb2;  &lt;br /&gt;
    baseRef.who(); // calls Base&amp;quot;s who() &lt;br /&gt;
  } &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
           &lt;br /&gt;
       &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>