Pages

Sunday, 28 June 2015

Virtual Methods

Virtual Methods

Virtual methods allow a reference to the base class to access "up into" the derived class.
You can use a reference to a base class to call a method in the derived class if the following are true:
  • The method in the derived class and the method in the base class each have the same signature and return type.
  • The method in the base class is labeled virtual.
  • The method in the derived class is labeled override.
See following example:
class person
{
 public string firstName;
 public string lastName;
 public ushort age;
  
 public virtual void greet()
 {
  Console.WriteLine("Person say: Hello "+ firstName + " " + lastName + ". I'm " + age);
 }
}

class employee : person
{
 public string company;

 public override void greet()
 {
  Console.WriteLine("Employee say: Hello " + firstName + " " + lastName + ". I'm " + age);
  Console.WriteLine("I work for " + company);
 }
}

class Program
{
 static void Main(string[] args)
 {
  employee me = new employee() { firstName="Yang",lastName="Sopiana",age=29,company="Company.inc"};
  Console.WriteLine("Calling from derived class");
  me.greet();

  person personMe = (person)me;
  Console.WriteLine("Calling from base class");
  personMe.greet();
 }
}

The code result following display:
Calling from derived class
Employee say: Hello Yang Sopiana. I'm 29
I work for Company.inc
Calling from base class
Employee say: Hello Yang Sopiana. I'm 29
I work for Company.inc

Important things to know about the virtual and override modifiers are the following:
  • The overriding and overridden methods must have the same accessibility. In other words, the overridden method cannot be, for example, private, and the overriding method public.
  • Can not override a method that is static or is not declared as virtual.
  • Methods, properties, and indexers and event can all be declared virtual and override.

Abstract Members

An abstract member is a function member that is designed to be overridden. An abstract member has the following characteristics:
  • It must be a function member. That is, fields and constants cannot be abstract members.
  • It must be marked with the abstract modifier.
  • It must not have an implementation code block. The code of an abstract member is represented by a semicolon.
  • Four types of members can be declared as abstract: Methods, Properties, Events, Indexers
See following example:
abstract class person
{
 public string firstName;
 public string lastName;
 public ushort age;
 
 public abstract void greet();  //abstract doesn't have implementation
}

class employee : person
{
 public string company;
 
 public override void greet()  //abstract method should be overridden
 {
  Console.WriteLine("Employee say: Hello " + firstName + " " + lastName + ". I'm " + age);
  Console.WriteLine("I work for " + company);
 }
}

class Program
{
 static void Main(string[] args)
 {
  employee me = new employee() { firstName="Yang",lastName="Sopiana",age=29,company="Company.inc"};
  Console.WriteLine("Calling from derived class");
  me.greet();

  person personMe = (person)me;
  Console.WriteLine("Calling from base class");
  personMe.greet();
 }
}

The code will display:
Calling from derived class
Employee say: Hello Yang Sopiana. I'm 29
I work for Company.inc
Calling from base class
Employee say: Hello Yang Sopiana. I'm 29
I work for Company.inc

Virtual Vs Abstract

Following table shows you the differences between virtual and abstract:
Virtual Member Abstract Member
Keyword virtual abstract
Implementation body Has an implementation body No implementation body—semicolon instead
Overridden in a derived class Can be overridden Must be overridden
Types of members Methods, Properties, Events, Indexers Methods, Properties, Events, Indexers

0 comments:

Post a Comment