<?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%2FCSharp_Tutorial%2FClass%2Fvirtual</id>
		<title>Csharp/CSharp Tutorial/Class/virtual - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FClass%2Fvirtual"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/virtual&amp;action=history"/>
		<updated>2026-04-30T00:28:14Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/virtual&amp;diff=5705&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/virtual&amp;diff=5705&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:53Z</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/CSharp_Tutorial/Class/virtual&amp;diff=5706&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/Class/virtual&amp;diff=5706&amp;oldid=prev"/>
				<updated>2010-05-26T12:16:16Z</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 inheritance with virtual method==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
  static void Main(string[] args)&lt;br /&gt;
  {&lt;br /&gt;
    B MyB = new D();&lt;br /&gt;
    D MyD = new D();&lt;br /&gt;
    MyB.Display();&lt;br /&gt;
    MyD.Display();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class B&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;
public 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;
public 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;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Class D&amp;quot;s Display Method&lt;br /&gt;
Class D&amp;quot;s Display Method&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Define virtual function in base and its subclass==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;public class Control&lt;br /&gt;
{&lt;br /&gt;
    public virtual void Foo() {}&lt;br /&gt;
}&lt;br /&gt;
public class MyControl: Control&lt;br /&gt;
{&lt;br /&gt;
    public virtual void Foo() {}&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Demonstrate a virtual method.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
 &lt;br /&gt;
class BaseClass { &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 BaseClass&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class Derived1 : BaseClass { &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 : BaseClass { &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;
class OverrideDemo { &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    BaseClass baseOb = new BaseClass(); &lt;br /&gt;
    Derived1 dOb1 = new Derived1(); &lt;br /&gt;
    Derived2 dOb2 = new Derived2(); &lt;br /&gt;
 &lt;br /&gt;
    BaseClass 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;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;who() in BaseClass&lt;br /&gt;
who() in Derived1&lt;br /&gt;
who() in Derived2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Illustrates polymorphism==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
public class Car&lt;br /&gt;
{&lt;br /&gt;
  public string make;&lt;br /&gt;
  public string model;&lt;br /&gt;
  public Car(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;
  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;
public class MyFirstCar : Car&lt;br /&gt;
{&lt;br /&gt;
  public MyFirstCar(string make, string model) : base(make, model)&lt;br /&gt;
  {&lt;br /&gt;
  }&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();  &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class MySecondCar : Car&lt;br /&gt;
{&lt;br /&gt;
  public MySecondCar(string make, string model) : base(make, model)&lt;br /&gt;
  {&lt;br /&gt;
  }&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(); &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static void Main()&lt;br /&gt;
  {&lt;br /&gt;
    MyFirstCar myCar = new MyFirstCar(&amp;quot;Toyota&amp;quot;, &amp;quot;MR2&amp;quot;);&lt;br /&gt;
    myCar.Accelerate();&lt;br /&gt;
    MySecondCar myMySecondCar = new MySecondCar(&amp;quot;Harley-Davidson&amp;quot;, &amp;quot;V-Rod&amp;quot;);&lt;br /&gt;
    myMySecondCar.Accelerate();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Pushing gas pedal of MR2&lt;br /&gt;
MR2 accelerating&lt;br /&gt;
Twisting throttle of V-Rod&lt;br /&gt;
V-Rod accelerating&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Illustrates versioning: virtual/new==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
public class BaseClass&lt;br /&gt;
{&lt;br /&gt;
  public string firstName;&lt;br /&gt;
  public string lastName;&lt;br /&gt;
  public BaseClass(string firstName, string lastName)&lt;br /&gt;
  {&lt;br /&gt;
    this.firstName = firstName;&lt;br /&gt;
    this.lastName = lastName;&lt;br /&gt;
  }&lt;br /&gt;
  public virtual void Accelerate()&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(&amp;quot;In BaseClass Accelerate() method&amp;quot;);&lt;br /&gt;
    Console.WriteLine(lastName + &amp;quot; accelerating&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class DerivedClass : BaseClass&lt;br /&gt;
{&lt;br /&gt;
  public DerivedClass(string firstName, string lastName) : base(firstName, lastName)&lt;br /&gt;
  {&lt;br /&gt;
  }&lt;br /&gt;
  public new void Accelerate()&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(&amp;quot;In DerivedClass Accelerate() method&amp;quot;);&lt;br /&gt;
    Console.WriteLine(lastName + &amp;quot; accelerating&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static void Main()&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(&amp;quot;Creating a DerivedClass object&amp;quot;);&lt;br /&gt;
    DerivedClass myDerivedClass = new DerivedClass(&amp;quot;Toyota&amp;quot;, &amp;quot;MR2&amp;quot;);&lt;br /&gt;
    Console.WriteLine(&amp;quot;Calling myDerivedClass.Accelerate()&amp;quot;);&lt;br /&gt;
    myDerivedClass.Accelerate();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Creating a DerivedClass object&lt;br /&gt;
Calling myDerivedClass.Accelerate()&lt;br /&gt;
In DerivedClass Accelerate() method&lt;br /&gt;
MR2 accelerating&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==new virtual method==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;class Control&lt;br /&gt;
{&lt;br /&gt;
    public virtual void Foo() {}&lt;br /&gt;
}&lt;br /&gt;
class MyControl: Control&lt;br /&gt;
{&lt;br /&gt;
    // not an override&lt;br /&gt;
    public new virtual void Foo() {}&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Override 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;using System;&lt;br /&gt;
class Employee&lt;br /&gt;
{&lt;br /&gt;
    public Employee(string name, float billingRate)&lt;br /&gt;
    {&lt;br /&gt;
        this.name = name;&lt;br /&gt;
        this.billingRate = billingRate;&lt;br /&gt;
    }&lt;br /&gt;
    // function now virtual&lt;br /&gt;
    virtual public float CalculateCharge(float hours)&lt;br /&gt;
    {&lt;br /&gt;
        return(hours * billingRate);&lt;br /&gt;
    }&lt;br /&gt;
    // function now virtual&lt;br /&gt;
    virtual public string TypeName()&lt;br /&gt;
    {&lt;br /&gt;
        return(&amp;quot;Employee&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    private string name;&lt;br /&gt;
    protected float billingRate;&lt;br /&gt;
}&lt;br /&gt;
class Manager: Employee&lt;br /&gt;
{&lt;br /&gt;
    public Manager(string name, float billingRate) :&lt;br /&gt;
    base(name, billingRate)&lt;br /&gt;
    {&lt;br /&gt;
    }&lt;br /&gt;
    // overrides function in Employee&lt;br /&gt;
    override public float CalculateCharge(float hours)&lt;br /&gt;
    {&lt;br /&gt;
        if (hours &amp;lt; 1.0F)&lt;br /&gt;
        hours = 1.0F;        // minimum charge.&lt;br /&gt;
        return(hours * billingRate);&lt;br /&gt;
    }&lt;br /&gt;
    // overrides function in Employee&lt;br /&gt;
    override public string TypeName()&lt;br /&gt;
    {&lt;br /&gt;
        return(&amp;quot;Civil Employee&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Test&lt;br /&gt;
{&lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        Employee[]    earray = new Employee[2];&lt;br /&gt;
        earray[0] = new Employee(&amp;quot;A&amp;quot;, 15.50F);&lt;br /&gt;
        earray[1] = new Manager(&amp;quot;B&amp;quot;, 40F);&lt;br /&gt;
        &lt;br /&gt;
        Console.WriteLine(&amp;quot;{0} charge = {1}&amp;quot;,&lt;br /&gt;
        earray[0].TypeName(),&lt;br /&gt;
        earray[0].CalculateCharge(2F));&lt;br /&gt;
        Console.WriteLine(&amp;quot;{0} charge = {1}&amp;quot;,&lt;br /&gt;
        earray[1].TypeName(),&lt;br /&gt;
        earray[1].CalculateCharge(0.75F));&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Employee charge = 31&lt;br /&gt;
Civil Employee charge = 40&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Override virtual method==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;class Control&lt;br /&gt;
{&lt;br /&gt;
    public virtual void Foo() {}&lt;br /&gt;
}&lt;br /&gt;
class MyControl: Control&lt;br /&gt;
{&lt;br /&gt;
    // an override for Control.Foo()&lt;br /&gt;
    public override void Foo() {}&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use virtual methods and polymorphism.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
 &lt;br /&gt;
class Shape {  &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;
  public Shape() {  &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;
  public Shape(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;
  public Shape(double x, string n) {  &lt;br /&gt;
    width = height = x;  &lt;br /&gt;
    name = n;  &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  public Shape(Shape 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;
class Triangle : Shape {  &lt;br /&gt;
  string style; // private &lt;br /&gt;
    &lt;br /&gt;
  public Triangle() {  &lt;br /&gt;
    style = &amp;quot;null&amp;quot;;  &lt;br /&gt;
  }  &lt;br /&gt;
  &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;
  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;
  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;
class Rectangle : Shape {   &lt;br /&gt;
  public Rectangle(double w, double h) : base(w, h, &amp;quot;rectangle&amp;quot;){ }  &lt;br /&gt;
  &lt;br /&gt;
  public Rectangle(double x) : 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;
  // 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;
class DynShapes {  &lt;br /&gt;
  public static void Main() {  &lt;br /&gt;
    Shape[] shapes = new Shape[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 Shape(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;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;object is triangle&lt;br /&gt;
Area is 48&lt;br /&gt;
object is rectangle&lt;br /&gt;
Area is 100&lt;br /&gt;
object is rectangle&lt;br /&gt;
Area is 40&lt;br /&gt;
object is triangle&lt;br /&gt;
Area is 24.5&lt;br /&gt;
object is generic&lt;br /&gt;
area() must be overridden&lt;br /&gt;
Area is 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Virtual Accessor==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
public class Class1 {&lt;br /&gt;
    public static void Main(string[] strings) {&lt;br /&gt;
        MyMoney dm = new MyMoney();&lt;br /&gt;
        dm.CurrencyValue = 2.50M;&lt;br /&gt;
        Console.WriteLine(dm.CurrencyValue);&lt;br /&gt;
        Dollar dollar = new Dollar();&lt;br /&gt;
        dollar.InitDollar(1.2M);&lt;br /&gt;
        dollar.EuroValue = dm.EuroValue;&lt;br /&gt;
        Console.WriteLine(dollar.CurrencyValue);&lt;br /&gt;
        dollar.CurrencyValue = 2 * dollar.CurrencyValue;&lt;br /&gt;
        dm.EuroValue = dollar.EuroValue;&lt;br /&gt;
        Console.WriteLine(dm.CurrencyValue);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
abstract public class Currency {&lt;br /&gt;
    private decimal mEuroValue = 0M; // [Euro]&lt;br /&gt;
    public abstract decimal CurrencyValue { get; set; }&lt;br /&gt;
    public decimal EuroValue {&lt;br /&gt;
        get {&lt;br /&gt;
            return mEuroValue;&lt;br /&gt;
        }&lt;br /&gt;
        set {&lt;br /&gt;
            mEuroValue = value;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class MyMoney : Currency {&lt;br /&gt;
    private static decimal mDMtoEuro = 1.96M;&lt;br /&gt;
    public override decimal CurrencyValue {&lt;br /&gt;
        get { return EuroValue * mDMtoEuro; }&lt;br /&gt;
        set { EuroValue = value / mDMtoEuro; }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class Dollar : Currency {&lt;br /&gt;
    public decimal mDollartoEuroConversion;&lt;br /&gt;
    public void InitDollar(decimal mDollartoEuro) {&lt;br /&gt;
        mDollartoEuroConversion = mDollartoEuro;&lt;br /&gt;
    }&lt;br /&gt;
    public override decimal CurrencyValue {&lt;br /&gt;
        get { return EuroValue * mDollartoEuroConversion; }&lt;br /&gt;
        set { EuroValue = value / mDollartoEuroConversion; }&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Virtual method in a multilevel hierarchy==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In a multilevel hierarchy, the system executes the first override-virtual method found &lt;br /&gt;
in the hierarchy.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;  &lt;br /&gt;
  &lt;br /&gt;
class BaseClass {  &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 BaseClass&amp;quot;);  &lt;br /&gt;
  }  &lt;br /&gt;
}  &lt;br /&gt;
  &lt;br /&gt;
class Derived1 : BaseClass {  &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 : Derived1 {  &lt;br /&gt;
  // This class also does not override who().  &lt;br /&gt;
}  &lt;br /&gt;
 &lt;br /&gt;
class Derived3 : Derived2 {  &lt;br /&gt;
  // This class does not override who().  &lt;br /&gt;
}  &lt;br /&gt;
 &lt;br /&gt;
class MainClass {  &lt;br /&gt;
  public static void Main() {  &lt;br /&gt;
    Derived3 dOb = new Derived3();  &lt;br /&gt;
    BaseClass baseRef; // a base-class reference  &lt;br /&gt;
  &lt;br /&gt;
    baseRef = dOb;   &lt;br /&gt;
    baseRef.who(); // calls Derived1&amp;quot;s who()  &lt;br /&gt;
  }  &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;who() in Derived1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Virtual Methods and Overriding==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&amp;lt;LI&amp;gt;A virtual method is declared as virtual in a base class.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;A virtual method is redefined in one or more derived classes.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;When redefining a virtual method in the derived class, the override modifier is used.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;When overriding a method, the type signature of the method cannot be changed.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;A virtual method cannot be static or abstract.&amp;lt;/LI&amp;gt;&amp;lt;/OL&amp;gt;&lt;br /&gt;
7.23.virtual&lt;br /&gt;
7.23.1.&lt;br /&gt;
Virtual Methods and Overriding&lt;br /&gt;
7.23.2.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/Overridevirtualfunctions.htm&amp;quot;&amp;gt;Override virtual functions&amp;lt;/a&amp;gt;&lt;br /&gt;
7.23.3.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/newvirtualmethod.htm&amp;quot;&amp;gt;new virtual method&amp;lt;/a&amp;gt;&lt;br /&gt;
7.23.4.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/Overridevirtualmethod.htm&amp;quot;&amp;gt;Override virtual method&amp;lt;/a&amp;gt;&lt;br /&gt;
7.23.5.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/Definevirtualfunctioninbaseanditssubclass.htm&amp;quot;&amp;gt;Define virtual function in base and its subclass&amp;lt;/a&amp;gt;&lt;br /&gt;
7.23.6.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/Classinheritancewithvirtualmethod.htm&amp;quot;&amp;gt;Class inheritance with virtual method&amp;lt;/a&amp;gt;&lt;br /&gt;
7.23.7.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/Illustratesversioningvirtualnew.htm&amp;quot;&amp;gt;Illustrates versioning: virtual/new&amp;lt;/a&amp;gt;&lt;br /&gt;
7.23.8.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/Illustratespolymorphism.htm&amp;quot;&amp;gt;Illustrates polymorphism&amp;lt;/a&amp;gt;&lt;br /&gt;
7.23.9.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/Demonstrateavirtualmethod.htm&amp;quot;&amp;gt;Demonstrate a virtual method.&amp;lt;/a&amp;gt;&lt;br /&gt;
7.23.10.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/Whenavirtualmethodisnotoverriddenthebaseclassmethodisused.htm&amp;quot;&amp;gt;When a virtual method is not overridden, the base class method is used&amp;lt;/a&amp;gt;&lt;br /&gt;
7.23.11.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/Virtualmethodinamultilevelhierarchy.htm&amp;quot;&amp;gt;Virtual method in a multilevel hierarchy&amp;lt;/a&amp;gt;&lt;br /&gt;
7.23.12.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/Usevirtualmethodsandpolymorphism.htm&amp;quot;&amp;gt;Use virtual methods and polymorphism.&amp;lt;/a&amp;gt;&lt;br /&gt;
7.23.13.&lt;br /&gt;
&amp;lt;A href=&amp;quot;/Tutorial/CSharp/0140__Class/VirtualAccessor.htm&amp;quot;&amp;gt;Virtual Accessor&amp;lt;/a&amp;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;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
 &lt;br /&gt;
class BaseClass { &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 BaseClass&amp;quot;); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class Derived1 : BaseClass { &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 : BaseClass { &lt;br /&gt;
  // This class does not override who(). &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class MainClass { &lt;br /&gt;
  public static void Main() { &lt;br /&gt;
    BaseClass baseOb = new BaseClass(); &lt;br /&gt;
    Derived1 dOb1 = new Derived1(); &lt;br /&gt;
    Derived2 dOb2 = new Derived2(); &lt;br /&gt;
 &lt;br /&gt;
    BaseClass 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 BaseClass&amp;quot;s who() &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;who() in BaseClass&lt;br /&gt;
who() in Derived1&lt;br /&gt;
who() in BaseClass&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>