My note : A virtual method is used to over-ride the data in Base class with the data by a method in the derived class. With out virtual key word, the data in the base class remain unaffected, |
|
example virtual methods | |
//no_virtual_3.cs using System; namespace team_players_no_virtual { class team { public void show() { Console.WriteLine("Welcome to Team Bdale"); } } class player_1 : team { public void show() { Console.WriteLine("player_1 in defense"); } } class Test { static void Main(string[] args) { team a = new team();; player_1 b = new player_1(); a.show(); b.show(); a = new player_1(); a.show(); } } } |
//with_virtual_3.cs using System; namespace team_players_with_virtual { class team { public virtual void show() { Console.WriteLine("Welcome to Team Bdale"); } } class player_1 : team { public override void show() { Console.WriteLine("player_1::defense"); } } class Test { static void Main(string[] args) { team a = new team(); player_1 b = new player_1();; a.show(); b.show(); a = new player_1(); a.show(); } } } |
C:\MySharp\virtual>csc no_virtual_3.cs Microsoft (R) Visual C# .NET Compiler version 7.10.6001.4 for Microsoft (R) .NET Framework version 1.1.4322 Copyright (C) Microsoft Corporation 2001-2002. All rights reserved. no_virtual_3.cs(12,27): warning CS0108: The keyword new is required on 'team_players_no_virtual.player_1.show()' because it hides inherited member 'team_players_no_virtual.team.show()' no_virtual_3.cs(7,27): (Location of symbol related to previous warning) C:\MySharp\virtual>no_virtual_3 Welcome to Team Bdale player_1 in defense Welcome to Team Bdale |
|
Now if you note that the reassignment did work (above red letters) a =
new player_1(); |
On the other hand virtual key word allowed override the
reassignment |
Note at the run time
|
|
example
//no_virtual_3b.cs
|
//with_virtual_3b.cs using System; namespace team_players_with_virtual { class team { public virtual void show() { Console.WriteLine("Welcome to Team Bdale"); } } class player_1 : team { public override void show() { Console.WriteLine("player_1::defense"); } } class Test { static void Main(string[] args) { team a = new team(); player_1 b = new player_1();; a.show(); b.show(); a = b; a.show(); } } } |